【发布时间】:2020-09-23 11:14:49
【问题描述】:
我很难理解std::atomic_ref<int> 和volatile 的正确用法。
天真地有三种可能:
std::atomic_ref<volatile int> ref1;
volatile std::atomic_ref<int> ref2;
volatile std::atomic_ref<volatile int> ref3;
我们想在何时以及何时使用每一个?我感兴趣的用例是 MMIO。
【问题讨论】:
-
你要解决什么问题?
-
我有一个 mmap 结构,用作 IPC fifo。读取和写入都有顺序要求。我正在考虑依靠原子访问的
std::memory_order来实现内存屏障。 -
如果该值是内存映射到硬件的,并且 所有 写入(即使是相同的写入)很重要,则需要
volatile,否则只需将std::atomic_ref<int> ref2与默认的memory_order::seq_cst应该足以保证订购。 -
@rustyx 你所说的相同写入是什么意思:写入相同的内存位置,还是将相同的值写入相同的内存位置?
-
@rustyx 我不确定我是否完全理解为什么我不需要
volatile,因为从 mmap'd 结构中读取会告诉我当前的 fifo 容量。
标签: c++ atomic volatile mmap atomicreference