小编mar*_*osb的帖子

并发互锁和读取是否需要内存屏障或锁定?

这是一个简单的问题,但在阅读之后我为什么需要内存屏障?我很困惑.

在下面的示例中,假设不同的线程重复调用Increment和Counter:

class Foo{
    int _counter=0;
    public int Counter 
    {
        get { return _counter; }
    }

    public void Increment()
    {
        Interlocked.Increment(ref _counter);
    }
}
Run Code Online (Sandbox Code Playgroud)

对不起,如果我误解了为什么我需要内存屏障?但似乎这表明上述课程在阅读_counter的价值时可能无法提供新鲜度保证.重复访问Counter属性的线程是否会永远停留在旧的Counter值(因为它缓存在寄存器中)?

return _counter;必要之前是内存屏障还是锁?

c# multithreading thread-safety shared-memory memory-barriers

3
推荐指数
1
解决办法
986
查看次数