ThreadStatic和同步

时间:2012-07-16 15:51:20

标签: c# multithreading

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


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

1 个答案:

答案 0 :(得分:8)

  

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

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

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