欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

C++ 并发编程:原子操作与内存序(memory_order)

发表于:|最后更新:|分类:系统编程|阅读:3052 次

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 可见,避免数据竞争。