【问题标题】:Is this a thread safe way to initialize a [ThreadStatic]?这是初始化 [ThreadStatic] 的线程安全方式吗?
【发布时间】:2010-11-08 10:12:43
【问题描述】:
[线程静态] 私有静态 Foo _foo; 公共静态 Foo CurrentFoo { 得到 { 如果(_foo == null){ _foo = new Foo(); } 返回_foo; } }

前面的代码线程安全吗?还是我们需要锁定方法?

【问题讨论】:

    标签: multithreading thread-safety thread-static


    【解决方案1】:

    如果它的 ThreadStatic 每个线程有一个副本。因此,根据定义,它是线程安全的。

    This blog has some good info on ThreadStatic.

    【讨论】:

    • 这就是我的例子的来源。我只是想弄清楚一个线程是否有可能获得 _foo == null 但随后发生线程切换并且另一个线程 _foo 即使它不为 null 也会被更新?
    • 不。每个线程一个 _foo,因此上下文切换没有影响。
    【解决方案2】:

    [ThreadStatic] 是线程本地存储的编译器/语言魔法。换句话说,它是绑定到线程的,所以即使有上下文切换也没关系,因为没有其他线程可以直接访问它。

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 2010-10-27
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      相关资源
      最近更新 更多