c# - ThreadStatic 和同步

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

最佳答案

I know ThreadStatic fields doesn't need any synchronization because the state is not shared. But what is about the static getter and the initialization?

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

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

关于c# - ThreadStatic 和同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507881/

相关文章:

c - C中的多线程for循环

c# - 在 xamarin.android 中获取 IoC 容器

c# - 在 .ashx 文件中创建了一个 session 并想在 .aspx 页面中访问但我发现了空值

c# - 工厂或服务模式或方法注入(inject)?

c# - 使用三个查询从两个数据表中选择唯一 ID 并合并

c# - 无法从 Expression< Func < Entity, bool>> 转换为 Func < Entity, bool>

c# - 如何给c#中的进程赋予ctrl + c?

iphone - 按住按钮直到 Action 在 ios 中执行

java - 同一线程获取和释放多个锁

c# - 使用 ThreadPool 进行垃圾收集