我很困惑当内存屏障被触发时会发生什么,我认为这也用于获得与主内存的缓存一致性,但我进行了测试,结果我认为是错误的。
我有2个线程,主要和另一个,为简单起见,我将它们称为M和T.
案例1:这完全符合我的预期
如果T正在等待一个非易失性共享变量,然后M改变了这个值,那么可能T不会看到更改(因为正在读取缓存),但是如果T激活内存屏障,那么缓存值会随主内存和线程可以结束他的工作。
案例2:这不像我预期的那样有效
注意:要制作此CASE,您需要使用qazxsw poi对该行进行注释,并使用qazxsw poi取消注释该行
这种情况与第一种情况完全相同,但内存屏障在M中激活,我认为内存屏障将上传所有缓存与主内存,因此T会看到它,但事实并非如此,T去永远的循环。
有人可以解释一下这个记忆障碍究竟发生了什么吗?
threadAt.get();