我正和一位朋友辩论,他说静态构造函数可以让位于竞争条件,因为静态构造函数可以被多次调用。似乎这只能在高容量多线程环境中发生。这甚至可能吗?
我找不到任何证明他错的文件。有没有人对此有任何见解?
谢谢!
答案 0 :(得分:12)
这甚至可能吗?
没有。 CLR为您处理此问题,并防止静态构造函数被多次调用。
这在C#语言规范中多次拼写出来。例如,3.1节说明:
每个应用程序域最多运行一次类型的静态构造函数。
答案 1 :(得分:3)
每个AppDomain只调用一次静态构造函数 ECMA-335规定CLI应保证:
“对于任何给定类型,类型初始值设定项应该只执行一次, 除非用户代码明确调用。“
我还没有听说过用C#调用类型初始化器的简便方法。
如果在Type初始值设定项之间创建循环依赖关系,则只会遇到问题
请看这里有关该问题的有趣文章:
https://msmvps.com/blogs/jon_skeet/archive/2012/04/07/type-initializer-circular-dependencies.aspx)