3

我有以下代码。这可能是个愚蠢的问题,但我不确定是否需要同步。


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 和初始化呢?

4

1 回答 1

8

我知道 ThreadStatic 字段不需要任何同步,因为状态不是共享的。但是静态 getter 和初始化呢?

这也不需要锁定来同步,因为每个线程的数据(支持字段)将是唯一的。您可以在这里安全地移除锁。

请注意,从 .NET 4 开始,您可能还需要考虑使用ThreadLocal<T>而不是[ThreadStatic]保存任何本地线程数据。在使用方面(即:)和清理方面都有一些优势,IsValueCreated因为您可以调用Dispose()以直接清理所有线程上的所有实例。

于 2012-07-16T15:52:37.897 回答