[我想我对Volatile.Write
和Volatile.Read
的确切含义有所了解,但我已经看到一些示例,其中在C#的CLR书中,Volatile.Write
在方法的开头使用,其中Jeffrey显示了使用Interlocked
实现简单自旋锁。这是代码:
struct SimpleSpinLock {
private int _resourceInUse; // 0 = false, 1 = true
public void Enter() {
while (true) {
if (Interlocked.Exchange(ref _resourceInUse, 1) == 0) return;
}
}
public void Leave() {
Volatile.Write(ref _resourceInUse, 0); // Why is it here??
}
}
据我所知,Volatile.Write
用于保证高于其的指令将在Volatile.Write
之前执行。但是在Leave
方法中只有一条指令,在这里使用Volatile.Write
的原因是什么?也许我理解事情完全错了,所以如果有人可以引导我走正确的道路,我将不胜感激。
不会声称我有足够的才能完全理解/解释这一点,但这是我的5美分。首先,编译器可以内联Leave
方法调用,因为它仅包含一行,因此实际写操作可能会被其他指令包围。次要的(主要是我想的)接下来是Volatile
class docs状态: