3
可能重复类的同时使用:
Is the C# static constructor thread safe?静态构造函数,并用它
我必须使用与长期运行的静态构造函数相同的静态类的多个线程。
我可以肯定,那同时这个类的使用从所有的线程才可用,只有在完成对静态类的构造函数的调用之后才会导致这个线程?
可能重复类的同时使用:
Is the C# static constructor thread safe?静态构造函数,并用它
我必须使用与长期运行的静态构造函数相同的静态类的多个线程。
我可以肯定,那同时这个类的使用从所有的线程才可用,只有在完成对静态类的构造函数的调用之后才会导致这个线程?
是的,绝对。这由C#规范保证,第10.12节。我试图找到一个更讲解线程的位,因为该部分只保证它会被执行一次。
请注意,如果您有一种“递归初始化”设置,您仍然可以在完全初始化之前在类中执行代码 - 并且如果两个静态构造函数相互依赖,那么您最终可能如果每个类都在不同的线程中初始化,会导致死锁。
另请注意,存在一个空的静态构造函数会影响静态字段初始值设定项的计时 - 如果您没有静态构造函数,那么当该字段可能被初始化时,CLR会有更多的余地。 (实际行为随着时间的推移发生了变化,但始终在规范范围内。)有关静态字段初始值设定项的更多信息,请参见规范的第10.5.5.1节。
基本上,保持静态构造函数尽可能简单和自包含。