Cur*_*ous 5 c++ concurrency synchronization atomic memory-barriers
执行以下是原子 RMW 操作
auto value = atomic.fetch_or(value, order);
Run Code Online (Sandbox Code Playgroud)
我们什么时候order知道std::memory_order_acq_rel原子中先前值的加载将获取先前可能在同一原子上发生的任何释放操作。对于获取相同原子变量的线程,写入操作将释放当前线程的写入操作。与 相同std::memory_order_seq_cst。
但是,当您使用时,RMW 操作的写入部分相对于内存排序的预期行为是什么std::memory_order_acquire?std::memory_order_release同样,用于RMW 操作负载侧的预期行为是什么?
在原子 RMW 上使用std::memory_order_acquire是仅获取操作。
由于它不“释放”任何内容,因此它不能成为与稍后发生的另一个原子获取操作(在同一原子变量上)同步关系的一部分。
因此,商店部分的等价物是std::memory_order_relaxed
std::memory_order_release在 RMW 上使用的推理类似。它不会获取任何东西,因此负载部分的订购等效项是“宽松的”