如果我需要使用静态字段提供线程安全和原子操作,我是否应该使用静态字段并将其互锁在一起?静态字段是否默认为原子字段?例如:
Interlocked.Increment(ref Factory.DefectivePartsCount);
感谢。
答案 0 :(得分:3)
是
字段(假设Int32)是原子的,不是因为它是静态的,而是因为它是32位。
但是,Factory.DefectivePartsCount += 1
需要对变量执行读取和写入操作,因此整个操作不是线程安全的。
答案 1 :(得分:1)
static
不保证线程安全方面的任何内容。因此,即使变量为static
,增量仍然不是原子的。因此,您仍需要根据具体情况使用经典同步机制。在你的情况下,Interlocked.Increment
没问题。