假设有两个线程分别在 x86 CPU0 和 CPU1 上运行。CPU0 上运行的线程执行以下命令:
A=1
B=1
包含 CPU1 最初拥有的 A 和包含 CPU0 拥有的 B 的高速缓存行。
我有两个问题:
如果我理解正确,两个存储都将被放入 CPU 的存储缓冲区。但是,对于第一个存储
A=1
,CPU1 的缓存必须无效,而第二个存储B=1
可以立即刷新,因为 CPU0 拥有包含它的缓存行。我知道 x86 CPU 尊重商店订单。这是否意味着B=1
之前不会写入缓存A=1
?假设在 CPU1 中执行了以下命令:
而(B=0);
打印一个
while
在 CPU1 中的和print
命令之间仅添加 lfence而不在 CPU0 之间A=1
和中添加 sfenceB=1
以使 1 始终在 x86 上打印就足够了吗?
while (B=0);
lfence
print A