C++ fetch_add和内存序的正确使用
请说明std::atomic::fetch_add()的用法,并解释不同的memory_order对其行为的影响。
回答
苦行僧
fetch_add()原子地将原子对象的值加上指定增量,返回原值(即修改前的值)。
std::atomic<int> counter{0};
int old = counter.fetch_add(1, std::memory_order_acq_rel);
内存序影响:
memory_order_relaxed:无同步或顺序约束,仅保证原子性,适合计数器memory_order_acquire/release:确保读取/写入的顺序性memory_order_acq_rel:读-改-写操作的acquire+releasememory_order_seq_cst:全局顺序一致性(默认,最严格但最慢)