我正在做一些受 this question 启发的研究我注意到针对类似问题提出的几个解决方案在静态变量初始化期间创建了互斥对象。如果创建它的线程在应用程序的生命周期内保持事件状态,这样的互斥体只会按预期工作。
现在看来静态变量由进程主线程初始化似乎是一个合理的猜测,而且进程主线程只有在主函数退出时才退出(这大概是在程序员的控制下)似乎也是一个合理的猜测.
但 C# 语言标准是否真的保证了其中任何一个?
PS:我说的是 Windows 线程,而不是 .NET 线程。
最佳答案
在 C# 中,静态变量在类首次加载时由类加载器初始化。这有一个有趣的工件,即位于首先引用该类的任何线程上。
我们还注意到不能保证主线程是托管线程,因此主线程之后的任何库都不能完全保证能够识别它。我曾经写过一个程序,在原生初始化后没有主线程,只是为了证明它可以完成。
关于c# - 静态变量是否在任何特定线程中初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32543468/