【发布时间】:2018-08-23 04:57:00
【问题描述】:
执行以下是原子RMW操作
auto value = atomic.fetch_or(value, order);
当order 是std::memory_order_acq_rel 时,我们知道原子中先前值的加载将获取之前可能在同一个原子上发生的任何释放操作。并且写入将释放当前线程对获取相同原子变量的线程的写入。与std::memory_order_seq_cst 相同。
但是当您使用std::memory_order_acquire 时,RMW 操作的写入部分在内存排序方面的预期行为是什么?同样,在 RMW 操作的负载端使用 std::memory_order_release 的预期行为是什么?
【问题讨论】:
-
它具有
order指定的语义,如果您要问的话,这并不奇怪。 -
@PasserBy
memory_order_release为读取操作指定了什么?当使用memory_order_release时,RMW 操作的读取端会发生什么情况? -
没什么,但
fetch_or也算作写入。 -
@PasserBy 当然,但是如果我将原子中的前一个值用于某些逻辑。我可以假设当前线程已与任何其他发布操作同步吗?还是阅读轻松?
-
fetch_or是一个操作,不是单独的读写。如果恰好在某处发生了获取,则具有释放语义的fetch_or将与稍后读取的内容同步。
标签: c++ concurrency synchronization atomic memory-barriers