c# - 静态变量是否在任何特定线程中初始化?

标签 c# windows

我正在做一些受 this question 启发的研究我注意到针对类似问题提出的几个解决方案在静态变量初始化期间创建了互斥对象。如果创建它的线程在应用程序的生命周期内保持事件状态,这样的互斥体只会按预期工作。

现在看来静态变量由进程主线程初始化似乎是一个合理的猜测,而且进程主线程只有在主函数退出时才退出(这大概是在程序员的控制下)似乎也是一个合理的猜测.

但 C# 语言标准是否真的保证了其中任何一个?

PS:我说的是 Windows 线程,而不是 .NET 线程。

最佳答案

在 C# 中,静态变量在类首次加载时由类加载器初始化。这有一个有趣的工件,即位于首先引用该类的任何线程上。

我们还注意到不能保证主线程是托管线程,因此主线程之后的任何库都不能完全保证能够识别它。我曾经写过一个程序,在原生初始化后没有主线程,只是为了证明它可以完成。

关于c# - 静态变量是否在任何特定线程中初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32543468/

相关文章:

c# - 定义一个接受通用类的任何实现的集合

c# - 多个控件的一个数据源

windows - 在 Windows 上通过 ssh 连接到 Git 失败

windows - RegisterEventSource 方法在 Windows 关闭时返回 'null'

windows - Windows 的 ImpersonateLoggedOnUser() + RevertToSelf() 与 Unix 的 seteuid() + setegid() 的速度

c# - 区分应用程序处理程序中的 Web API 请求和 MVC 请求

c# vb : Should we use System. 懒惰的资源密集型任务? (不需要线程时)

C# Throw 被最后一次捕获

windows - CMake 告诉我什么(Windows 上的错误)?

c++ - 您使用过的最可靠、最快速的 Windows C++ 分析器是哪个?