具有 (read/write)-only 内存顺序的内存排序或读-修改-写操作

Memory ordering or read-modify-write operation with (read/write)-only memory order

执行以下是一个原子RMW操作

auto value = atomic.fetch_or(value, order);

orderstd::memory_order_acq_rel时,我们知道原子中先前值的加载将获取先前可能在同一原子上发生的任何释放操作。而write会释放当前线程对获取相同原子变量的线程的写操作。与 std::memory_order_seq_cst.

相同

但是当您使用 std::memory_order_acquire 时,RMW 操作的写入部分在内存排序方面的预期行为是什么?同样,在 RMW 操作的负载端使用 std::memory_order_release 的预期行为是什么?

在原子 RMW 上使用 std::memory_order_acquire 是仅获取操作。
由于它不 'release' 任何东西,因此它不能成为与稍后发生的另一个原子获取操作(在同一原子变量上)的同步关系的一部分。
因此,商店部分的等价物是 std::memory_order_relaxed

在 RMW 上使用 std::memory_order_release 的类似推理。它不获取任何东西,所以加载部分的等价排序是 'relaxed'