c++的std::memory_order是什么 原子操作的内存序详解【并发进阶】

admin 百科 12
std::memory_order是一组枚举值,用于约束原子操作周围内存访问的重排行为及跨线程可见性,不改变原子性本身;它解决编译器/CPU重排导致的多线程同步失效问题,含relaxed、consume(弃用)、acquire、release、acq_rel、seq_cst六种,其中acquire-release配对构成核心同步模型。

c++的std::memory_order是什么 原子操作的内存序详解【并发进阶】-第1张图片-佛山资讯网

std::memory_order 是什么

它是一组枚举值,用来告诉编译器和 CPU:在执行原子操作时,周围的普通读写操作**可以怎么重排**、**对其他线程可见的顺序如何保证**。它不改变原子操作本身的原子性,而是控制该操作与其他内存访问之间的**同步关系和可见性边界**。

为什么需要内存序

现代 CPU 和编译器为了性能,会做两类重排:

  • 编译器重排:在不改变单线程语义的前提下,调整指令顺序(比如把读操作提前)
  • CPU 重排:乱序执行、写缓冲区延迟刷新、缓存不一致等,导致多线程下看到的执行顺序和代码顺序不一致

如果没有显式约束,两个线程可能永远看不到彼此的修改——看似正确的原子变量,实际无法完成同步。内存序就是为了解决这个问题而设的“围栏”或“承诺”。

六种 memory_order 及典型用途

注意:所有 memory_order 都只对当前这条原子操作生效,影响的是它与前后非原子/原子访问的相对顺序。

立即学习“C++免费学习笔记(深入)”;

标签: c++ 无锁 为什么

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~