4

我是否应该使用静态字段并互锁在一起,以防我需要使用静态字段提供线程安全和原子操作,静态字段是否默认是原子的?例如:

Interlocked.Increment(ref Factory.DefectivePartsCount);

谢谢。

4

2 回答 2

4

是的。

该字段(假设为 Int32)是原子的,不是因为它是静态的,而是因为它是 32 位的。

但是,Factory.DefectivePartsCount += 1需要对变量执行读取和写入操作,因此整个操作不是线程安全的。

于 2012-10-20T13:00:36.197 回答
1

static不保证线程安全方面的任何事情。因此,即使变量是 ,增量仍然不是原子的static。因此,您仍然需要根据情况使用经典的同步机制。在你的情况下Interlocked.Increment很好。

于 2012-10-20T13:54:03.670 回答