【发布时间】:2011-07-08 11:12:24
【问题描述】:
谁能解释一下这个说法:
shared variables
x = 0, y = 0
Core 1 Core 2
x = 1; y = 1;
r1 = y; r2 = x;
如何在 x86 处理器上拥有 r1 == 0 和 r2 == 0?
【问题讨论】:
-
preshing.com/20120515/memory-reordering-caught-in-the-act 使用带有/不带有
mfence的此示例的汇编版本来演示内存重新排序,并解释为什么允许它发生。在 C/C++ 中,如果它们不是atomic,它只是普通的 UB;如果它们正在重新排序,则只能在memory_order_release或更弱的情况下发生。 -
不幸的是(?)memory-order标签是memory-barriers的同义词,所以这个关于内存排序的问题只能用一个可以防止重新排序的标签来标记。 (至少对于足够强大的内存屏障......)
标签: c++ c x86 race-condition memory-barriers