在cppreference.com 上的文档中std::memory_order,有一个轻松排序的示例:
轻松下单
标记的原子操作
memory_order_relaxed不是同步操作;它们不会在并发内存访问之间强加顺序。它们只保证原子性和修改顺序的一致性。例如,x 和 y 最初为零,
Run Code Online (Sandbox Code Playgroud)// Thread 1: r1 = y.load(std::memory_order_relaxed); // A x.store(r1, std::memory_order_relaxed); // B // Thread 2: r2 = x.load(std::memory_order_relaxed); // C y.store(42, std::memory_order_relaxed); // D允许产生 r1 == r2 == 42 因为,虽然 A在线程 1 中先于 B排序, C 在线程 2 中在D之前排序,但没有什么能阻止 D 在 y 的修改顺序中出现在 A 之前,而 B 从在 x 的修改顺序中出现在 C 之前。线程 1 中的负载 A 可以看到 D 对 …