C++11 引入的 std::atomic 与内存序模型,为无锁编程提供了标准化的语言级支持。
一、六种内存序
memory_order_relaxed:仅保证原子性,无顺序约束memory_order_consume:依赖顺序(实践中较少使用)memory_order_acquire:读操作,后续读写不能重排到其前memory_order_release:写操作,之前读写不能重排到其后memory_order_acq_rel:读写兼具 acquire 与 release 语义memory_order_seq_cst:全局顺序一致,默认且最严格
二、Acquire-Release 示例
cpp
std::atomic<bool> ready{false};
int data = 0;
// 线程 A
data = 42;
ready.store(true, std::memory_order_release);
// 线程 B
while (!ready.load(std::memory_order_acquire)) {}
assert(data == 42); // 保证可见release 与 acquire 配对使用,确保 data 的写入在 ready 变为 true 之前对线程 B 可见,避免数据竞争。