我有以下代码。这可能是一个愚蠢的问题,但我不确定同步是否必要。
class MyClass
{
[ThreadStatic]
private static object _staticObject;
private static readonly LockStaticField = new object();
public static object StaticObject
{
get
{
lock(LockStaticField)
{
return _staticObject ?? (_staticObject = new object());
}
}
}
}我知道ThreadStatic字段不需要任何同步,因为状态不是共享的。但是静态getter和初始化是怎么回事呢?
发布于 2012-07-16 23:52:38
我知道ThreadStatic字段不需要任何同步,因为状态不是共享的。但是静态getter和初始化是怎么回事呢?
这也不需要锁定来进行同步,因为每个线程的数据(支持字段)都是唯一的。您可以在此处安全地移除锁。
注意,从.NET 4开始,您可能还想考虑使用ThreadLocal而不是[ThreadStatic]来保存任何本地线程数据。在使用方面(例如:IsValueCreated)和清理方面都有一些优势,因为您可以调用Dispose()来直接清理所有线程上的所有实例。
https://stackoverflow.com/questions/11507881
复制相似问题