我有以下代码。这可能是一个愚蠢的问题,但我不确定,如果有必要同步。
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和初始化是什么呢?
答案 0 :(得分:8)
我知道ThreadStatic字段不需要任何同步,因为状态不是共享的。但是静态getter和初始化是什么呢?
这也不需要锁定来同步,因为每个线程的数据(支持字段)将是唯一的。你可以在这里安全地移除锁。
请注意,从.NET 4开始,您可能还需要考虑使用ThreadLocal<T>
而不是[ThreadStatic]
来保存任何本地线程数据。在使用方面(即IsValueCreated
)和清理方面都有一些优点,因为您可以调用Dispose()
直接清理所有线程上的所有实例。