通过C#读取Richter的CLR,SO和habr上的一些线程,以及MSI / MESI / MOESI /等上的wiki,我仍然不明白:
如果处理器已经具有缓存一致性协议,为什么还需要Thread.MemoryBarrier
或volatile
?这是否意味着对缓存的共享变量的任何读/写操作都会调用它在缓存之间的值的同步?
如果不是,那么Interlocked
是否有助于强制缓存一致性?
编辑:问题的原因是我正在处理应用程序,该应用程序旨在与一堆后台线程一起工作,这些线程应该在某些标志更新时安全退出,但如果我理解正确,我应该使用MemoryBarrier
/ Interlocked
声明包围标记
提前谢谢。