的公共静态成员(属性),我有一个样品静态类是静态类线程安全
public static class SampleClass
{
private static readonly string _personName;
private static readonly string _country;
static SampleClass()
{
_personName = "JourneyMan";
_country = "Zee";
System.Threading.Thread.Sleep(5000);
}
public static string PersonName
{
get { return _personName; }
}
public static string Country
{
get { return _country; }
}
}
我特意介绍了静态构造一个Thread.sleep代码。
我写了一个示例应用程序,其中两个线程在ManualResetEvent上等待。我试图模拟一个线程试图查询属性并执行静态构造函数并进入睡眠状态的场景,其他线程是否可以访问第二个属性并返回空值?
但根据我所观察到的,除非构造完成,否则第二个线程无法获取属性值。
这是为我们处理的吗?或者我做错了什么?
那么我可以假设,在上述情况下,没有锁需要确保静态类的构造完成吗?
谢谢
任何事情都只是线程安全的,标准AFAIK是你的静态方法应该是线程安全的。 –
@GrantThomas所以我可以假设,除非施工完成,否则不允许线程查询某个类的属性? – Sandepku
Eric Lippert在静态构造函数上做了一系列的工作。第1部分在http://ericlippert.com/2013/02/06/static-constructors-part-one/。值得一读。而且,是的,在这种情况下不需要锁。 –