atomic_uint
用 memory_order_relaxed 读取 a 的值和读取 a 的值有什么区别volatile unsigned int
(假设 volatile 操作是原子的)?
具体来说,让我们定义:
解决方案 1
- “writer”线程写入
atomic_uint
(使用任何内存顺序限定符,从 memory_order_relaxed 到 memory_order_seq_cst) - “阅读器”线程在同一个线程上进行原子轻松读取
atomic_uint
解决方案 2
- “作家”线程写入
volatile unsigned int
- “读者”线程读取该值
按原样,我知道这两种情况都不能保证读者能够读取作者写入的值。我想了解的是易失性读取和轻松原子读取之间的区别。在考虑写后读一致性时,一个提供什么而另一个不提供什么?
我看到的唯一区别是:
- volatile 操作不能在它们之间重新排序,而原子负载可以与其他原子操作重新排序
还有别的吗?