int x = 0, y = 0;
void T1() {
x = 1; int t = y; // Store(x); Load(y)
__sync_synchronize();
printf("%d", t);
}
void T2() {
y = 1; int t = x; // Store(y); Load(x)
__sync_synchronize();
printf("%d", t);
}
遍历模型告诉我们:01, 10, 11
错误 (简化) 的假设
实际的实现
在任何时刻,处理器都维护一个 $\mu$op 的 “池子”
满足单处理器 eventual memory consistency 的执行,在多处理器系统上可能无法序列化!
当 $x \ne y$ 时,对 $x$, $y$ 的内存读写可以交换顺序
# <-----------+
movl $1, (x) # |
movl (y), %eax # --+
宽松内存模型的目的是使单处理器的执行更高效。
x86 已经是市面上能买到的 “最强” 的内存模型了 😂