web*_*ber 5 c# static-constructor race-condition
我正和一位朋友辩论,他说静态构造函数可以让位于竞争条件,因为静态构造函数可以被多次调用.似乎这只能在高容量多线程环境中发生.这甚至可能吗?
我找不到任何证明他错的文件.有没有人对此有任何见解?
谢谢!
Ree*_*sey 12
这甚至可能吗?
不会.CLR会为您处理此问题,并防止静态构造函数被多次调用.
这在C#语言规范中多次拼写出来.例如,第3.1节规定:
每个应用程序域最多运行一次类型的静态构造函数.
每个 AppDomain 只调用一次静态构造函数。
ECMA-335 规定 CLI 应保证:
“除非由用户代码显式调用,否则对于任何给定类型,类型初始值设定项都应执行一次。”
我还没有听说过在 C# 中调用类型初始值设定项的便捷方法。
仅当您在类型初始值设定项之间创建循环依赖关系时,才可能遇到问题。
请参阅此处有关该问题的有趣文章:
https://msmvps.com/blogs/jon_skeet/archive/2012/04/07/type-in itializer-circular-dependency.aspx )