我想以我理解线程同步原语作为我的问题的开头,我的问题不是如何使用它们。这只是对我从MSDN上读到的一项声明的澄清。
托管线程处理最佳实践页面的末尾指出,以下是重点之一:
默认情况下使静态数据(在Visual中共享)线程安全。
那是什么意思?这是否意味着有一种方法可以使静态数据线程安全,而无需使用任何线程同步代码?如果是这样的话,是怎么做的?
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;
}
}发布于 2016-05-31 22:21:46
感谢评论员们对这个问题的指导。我将此作为对任何可能有同样困惑的人的回答。
读下一行就可以清楚地看出,这意味着我们必须使用线程同步代码来确保静态数据的线程安全。
虽然我们还必须小心敏感的实例数据,这些数据可能能够适应多个线程的使用,但最好在我们为保护实例数据而编写的同步代码级别上达成折衷,因为这可能会对性能产生不利影响。
下一点内容如下:
默认情况下,不要使实例数据线程安全。添加锁以创建线程安全代码会降低性能,增加锁争用,并可能发生死锁。在常见的应用程序模型中,一次只有一个线程执行用户代码,从而最小化了对线程安全的需求。因此,默认情况下,.NET框架类库并不是线程安全的。
https://stackoverflow.com/questions/37556507
复制相似问题