在 x86 架构上,存储到同一内存位置具有总顺序,例如,请参阅此视频。C++11 内存模型中的保证是什么?
更准确地说,在
-- Initially --
std::atomic<int> x{0};
-- Thread 1 --
x.store(1, std::memory_order_release);
-- Thread 2 --
x.store(2, std::memory_order_release);
-- Thread 3 --
int r1 = x.load(std::memory_order_acquire);
int r2 = x.load(std::memory_order_acquire);
-- Thread 4 --
int r3 = x.load(std::memory_order_acquire);
int r4 = x.load(std::memory_order_acquire);
是否r1==1, r2==2, r3==2, r4==1
允许结果(在 x86 以外的某些架构上)?如果我将 all 替换memory_order
为std::memory_order_relaxed
怎么办?