小编abi*_*ile的帖子

cppreference 中对宽松排序的解释是错误的吗?

cppreference.com 上文档中std::memory_order有一个轻松排序的示例:

轻松下单

标记的原子操作memory_order_relaxed不是同步操作;它们不会在并发内存访问之间强加顺序。它们只保证原子性和修改顺序的一致性。

例如,x 和 y 最初为零,

// 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
Run Code Online (Sandbox Code Playgroud)

允许产生 r1 == r2 == 42 因为,虽然 A在线程 1 中于 B排序, C 在线程 2 中D之前排序,但没有什么能阻止 D 在 y 的修改顺序中出现在 A 之前,而 B 从在 x 的修改顺序中出现在 C 之前。线程 1 中的负载 A 可以看到 D 对 …

c++ multithreading language-lawyer c++11 as-if

13
推荐指数
1
解决办法
572
查看次数

标签 统计

as-if ×1

c++ ×1

c++11 ×1

language-lawyer ×1

multithreading ×1