I am reading about Java Memory Model in JSR-133 and I cannot understand how this type of behavior is acceptable:
有人可以解释一下吗?
CPU 必须确保的唯一一件事是,线程内对 X 的写入不会影响对其关联的 RX 内存位置的后续分配。它没有说明从哪里获取要写入的值。
所以,
在线程 1 中,CPU 说
“哦,我需要读取 X”,因此开始读取操作。
然后它说
“我需要写信给 X”,那么QUEUES写入队列中的值
线程 2 做同样的事情。
“哦,我需要读 X”并开始阅读。
“我需要写入 X”,并对写入进行排队。
现在我们有两个等待读取和两个排队写入。
如果 CPU 架构规定一个内核上的读取可能会询问另一个内核的写入队列,那么两个内核都可以互相读取对方对 X 的未完成写入。因此,您会得到跨内核拉取的两个值,最终被分配给 RX 内存位置那个线程。
当您在指令流中放置内存屏障时,它可以防止这种类型的过度排队写入读取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)