当前位置: 首页 > news >正文

基础能力系列 - 多线程1 - 内存序

C++11 定义了 6 种原子操作的内存序(memory order),用于控制多线程中的可见性和重排序规则。如下是六种内存序的简介、特点和适用场景:


六种内存序一览表

内存序名称描述 / 特点是否同步其他线程可见性是否禁止重排序使用场景示例
memory_order_relaxed最弱序,无同步,无重排序限制不同步其他线程允许重排序统计计数器、自增编号等
memory_order_consume数据依赖同步(已废弃)实际等同 acquire编译器优化误差多几乎不用
memory_order_acquire获取操作,防止之后操作被重排序到前面同步前写可见禁止之后操作重排序load时读取同步数据
memory_order_release释放操作,防止之前操作被重排序到后面同步后读可见禁止之前操作重排序store时写入同步数据
memory_order_acq_rel同时具有 acquire 和 release 效果双向同步全部禁止重排序常用于fetch_add等读改写操作
memory_order_seq_cst最强序,全局顺序一致性所有线程可见强制全局顺序多线程安全,易理解但性能最低

实用说明

memory_order_relaxed`

  • 不做任何同步,仅保证原子性。
  • 不保证其他线程看到值变化的顺序。
std::atomic<int>x(0);x.store(1,std::memory_order_relaxed);// 线程B可能看不到

memory_order_acquire`

  • 常用于load操作。
  • 保证:本线程对该变量之后的操作不会被提到它前面。
intdata=0;std::atomic<bool>ready=false;// 线程Adata=42;ready.store(true,std::memory_order_release);// 线程Bwhile(!ready.load(std::memory_order_acquire));std::cout<<data;// 始终能看到 data = 42

memory_order_release`

  • 常用于store操作。
  • 保证:本线程在此之前的写入对其他 acquire 线程可见。

memory_order_acq_rel`

  • 用于读-改-写原子操作:如fetch_addcompare_exchange
  • 保证:在操作前后都不能乱序
counter.fetch_add(1,std::memory_order_acq_rel);

memory_order_seq_cst`

  • “Sequential Consistency”:最直观的并发语义
  • 保证所有线程看到的修改具有全局一致顺序
  • 对于简单并发程序是最安全选择,但性能可能不理想

memory_order_consume`

  • 理论上只依赖“数据依赖性”,但已在实践中废弃(比如 gcc/clang 实际当作 acquire 处理)

小结

Relaxed < Acquire/Release < Acq_Rel < Seq_Cst (低同步/快) → (高同步/慢)

往期精彩回顾:
基础能力系列
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
BTC系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列
http://www.jsqmd.com/news/880635/

相关文章:

  • Claude Code完整安装与配置指南
  • 别让阴影偷走你的电费!手把手教你用无人机巡检排查光伏板热斑(附Python分析脚本)
  • 四川钢板厂家现货批发|工程专用钢材一站式配送 - 四川盛世钢联营销中心
  • CentOS 7.9下Lustre 2.12.9集群部署避坑指南:从内核安装到客户端挂载的完整流程
  • 项目经理的终极困境:资源永远不够,高手靠取舍赢结果
  • MNE-Python 第10天学习笔记:结果报告与可视化
  • 几字型檩条技术参数:几字型檩条、几字型钢厂家、几字形支架、几字形檩条、几字形钢、几字支座、几字支架、几字檩条、几字马凳选择指南 - 优质品牌商家
  • 保姆级教程:用Python手写逻辑回归,从零搞定西瓜书3.0α数据集分类
  • 2025-2026年国内全屋定制品牌推荐:五款口碑评测防变形开裂特点选择指南
  • 2026年5月黄金回收市场优质服务商解析 - 2026年企业推荐榜
  • Codex 走中转站后,手机也能远程控制,Free 账号也能用
  • esp开发与应用(1602液晶显示屏)
  • 聚焦“纪律高危型”学生的考勤画像深度分析
  • C166开发中HEX文件生成问题解析与解决方案
  • 气象科研效率提升:用xarray和metpy优雅处理ERA5数据,自动计算Q1/Q2
  • 用Python手把手复现GRO淘金优化算法(附完整代码与CEC2005测试)
  • 2026年蒸发式冷却塔怎么选:闭式冷却塔、不锈钢冷却塔、冷却塔填料、凉水塔、圆形冷却塔、横流式冷却塔、玻璃钢冷却塔选择指南 - 优质品牌商家
  • 如何用OneNote Markdown插件快速提升笔记效率:终极指南
  • 避坑指南:用wsl --import迁移Ubuntu后,那些官网没明说的配置项(如默认用户、DNS)
  • 2026双头超声波机厂家怎么选:非标订做超声波清洗机/伺服超声波/包布热压机/单头高周波机/双头高周波机/同步熔断机/选择指南 - 优质品牌商家
  • 告别‘芝麻开门’:用Python和PyTorch搭建一个文本无关的声纹验证系统(附VoxCeleb数据集实战)
  • 记录一下航模涡喷发动机满载运行时叶片突然断裂
  • 2026高压发泡机技术解析:弹性体发泡机/方向盘高压泡机/水箱PU发泡机/热水器发泡机/热水器环戊烷发泡机/环戊烷发泡机/选择指南 - 优质品牌商家
  • 量子基准测试与PyQBench框架实践指南
  • CVE二进制工具:无源码漏洞检测的原理与实战
  • Windows 批量解压 TAR 文件脚本:支持文件数量校验、断点续解压和自动跳过
  • 2026年琼海靠谱装修公司实力大PK,究竟哪家更值得选?
  • Windows Cleaner技术架构解析:开源磁盘清理工具的模块化设计与实现
  • OpenClaw接入飞书详细教程
  • 函数指针调用的两种语法及其在嵌入式C中的应用