我花了一个小时以上搜索某些声明说同步原语会强制执行缓存一致性,但没有成功。我找到的最接近的是维基百科的说明:只有在单核处理器上,所有线程都使用相同的缓存时,使用volatile就足够了。在多核处理器上,如果一个核心上调用stop(),而另一个核心上执行run(),那么CPU缓存同步可能需要一段时间,这意味着两个核心可能看到isRunning_的两个不同视图。
如果使用同步机制,它们将确保所有缓存获取相同的值,但代价是程序会暂停一段时间。性能和正确性哪个更重要取决于您的实际需求。
这表明内存屏障确实强制缓存一致性,由于某些同步原语使用内存屏障进行实现(同样来自维基百科),这是一些“证据”。但我不确定是否应该相信它,也不能确定我是否解释正确。请问有人能够澄清一下吗?关键字volatile不能保证内存屏障强制执行高速缓存一致性。
volatile
关键字对线程同步没有任何作用(不确定C#是否有影响)。内存屏障确实可以强制执行缓存一致性。你可能需要了解强/弱内存模型以及内存排序。 - Chris O