默认情况下使静态数据成为线程安全的意义是什么?

时间:2016-05-31 22:14:51

标签: c# .net multithreading

我想在我的问题前加上我理解线程同步原语的说法,而我的问题不在于如何使用它们。这只是对我从MSDN上读到的声明的澄清。

Managed Threading Best Practices页面即将结束,作为其中一个要点,如下:

默认情况下,使静态数据(在Visual Basic中为Shared)线程安全。

这是什么意思?这是否意味着有一种方法可以在不使用任何线程同步代码的情况下使静态数据成为线程安全的?如果是这样,怎么样?

class Foo
{
  // How do you make this thread-safe without thread sync code?
  static int x;

  static void Do()
  {
    // This, I understand, is thread-safe, by default.
    int y;
  }
}

1 个答案:

答案 0 :(得分:0)

感谢评论员对该问题的指导。我发布这个作为对任何可能有同样困惑的人的答案。

阅读下一行有点清楚,暗示我们必须使用线程同步代码来确保静态数据的线程安全性。

虽然我们还必须小心可能适合多线程使用的敏感实例数据,但最好在我们为保护实例数据而编写的同步代码级别上进行权衡,因为它可能会产生负面影响性能

下一步内容如下:

默认情况下,不要使实例数据线程安全。添加锁以创建线程安全代码会降低性能,增加锁争用,并可能导致死锁发生。在常见的应用程序模型中,一次只有一个线程执行用户代码,这最大限度地减少了对线程安全的需求。因此,默认情况下,.NET Framework类库不是线程安全的。