这是一个简单的问题,但是在阅读了为什么我需要内存屏障?我对此很困惑。
在下面的示例中,假设不同的线程重复调用 Increment 和 Counter:
class Foo{
int _counter=0;
public int Counter
{
get { return _counter; }
}
public void Increment()
{
Interlocked.Increment(ref _counter);
}
}
对不起,如果我误解了为什么我需要内存屏障?但似乎它暗示上面的类在读取_counter的值时可能没有提供新鲜度保证。重复访问 Counter 属性的线程是否会永远停留在 Counter 的旧值上(因为它被缓存在寄存器中)?
在必要之前是内存屏障还是锁return _counter;
?