可能的重复:
易失性 vs. 互锁 vs. 锁定
我试图了解我想使用 volatile 关键字 vs Interlocked 的情况。
如果我有一个变量,每次读取和写入该对象都是通过 Interlocked.Exchange,这与将该变量标记为 volatile 本质上是一样的吗?
private object _threadSafe;
private void Test()
{
var tmp = new object();
Interlocked.Exchange(ref tmp, _threadSafe); //read
Interlocked.Exchange(ref _threadSafe, "hi"); //write
}
如果不是这个,_threadSafe 对象被标记为 volatile 并且我删除了 Interlocked,那在功能上是否等效?(假设我不依赖于原子读/增量/写,比如增加一个值)。