如果创建这样的只读静态成员:
public sealed class MyClass
{
public readonly static MyClass Instance = new MyClass();
}
我们知道,如果某个线程第一次访问MyClass,静态构造函数将初始化MyClass.Istance字段。但是,如果多个线程同时访问MyClass(即静态字段线程的初始化是否安全),是否会创建单个实例(在本例中为MyClass)?
.NET CLR确保静态初始化始终是线程安全的。无论有多少个线程访问它,访问顺序如何,它总是初始化一次。
您的代码似乎显示了Singleton模式开始的迹象
基本上,如果您想在初始化类之前运行自定义代码,那么您需要自己确保线程安全
这是一个需要确保自定义代码线程安全的示例。但是静态初始化部分总是线程安全的。
C#语言的规范保证类初始化是线程安全的,因此只会创建一个MyClass
实例。从那时起,您必须自己确保线程安全。以下是MSDN参考资料:
http://msdn.microsoft.com/en-us/library/aa645612.aspx