我应该使用静态字段并互锁吗?

时间:2012-10-20 12:53:45

标签: c# multithreading static interlocked

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

Interlocked.Increment(ref Factory.DefectivePartsCount);

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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