我正在做一些受this question启发的研究,我注意到几个针对类似问题的解决方案在静态变量初始化期间创建了一个互斥对象。只有创建它的线程在应用程序的生命周期内保持活动状态,这样的互斥锁才能按预期工作。
现在似乎可以合理地猜测静态变量是由进程主线程初始化的,并且似乎也是合理的猜测,进程主线程仅在主函数退出时退出(可能是在程序员的控制下)
但其中任何一个实际上都是由C#语言标准保证的吗?
PS:我说的是Windows线程,而不是.NET线程。
答案 0 :(得分:3)
在C#中,首次加载类时,类加载器会初始化静态变量。这有一个有趣的工件,就是在第一次引用该类的任何线程上。
我们还注意到主线程不能保证是托管线程,因此主线程之后的任何库都不能保证能够识别它。我编写了一个程序,在原生初始化后没有主线程只是为了证明它可以完成。