news 2026/5/25 1:35:19

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基础能力系列 - 多线程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系列
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 1:35:00

AArch64异常处理机制详解与ARMv8架构实践

1. AArch64异常处理模型概述 异常处理是现代处理器架构的核心机制之一&#xff0c;它使处理器能够响应硬件事件、软件错误以及系统调用等各类特殊情况。在ARMv8-A架构的AArch64执行状态下&#xff0c;异常处理模型经过精心设计&#xff0c;为操作系统和系统级开发者提供了灵活而…

作者头像 李华
网站建设 2026/5/25 1:33:31

腾讯云TRTC、声网、即构三款实时音视频SDK怎么选?2026实测对比

做企业级直播、远程医疗、在线教育这些场景&#xff0c;底层用哪家的RTC SDK是最核心的决策之一。我们团队三家的都用过&#xff0c;有些直观感受分享下。一、先说各自定位腾讯云TRTC声网Agora即构ZEGO核心优势腾讯生态整合全球化覆盖教育场景深度优化最低延迟200ms以内200ms以…

作者头像 李华
网站建设 2026/5/25 1:28:11

保姆级教程:用Python手写逻辑回归,从零搞定西瓜书3.0α数据集分类

从零实现逻辑回归&#xff1a;用Python解析西瓜数据集分类任务当翻开周志华教授的《机器学习》第三章&#xff0c;许多初学者会被"对率回归"&#xff08;即逻辑回归&#xff09;的数学推导劝退。本文将以纯手工代码实现的方式&#xff0c;带你用Python从零构建逻辑回…

作者头像 李华
网站建设 2026/5/25 1:27:39

Kaggle新冠X光数据集处理实战:用Python脚本搞定80/20划分与掩码文件整理

Kaggle新冠X光数据集处理实战&#xff1a;Python脚本实现高效数据划分与掩码管理医学影像分析项目的第一步往往不是模型构建&#xff0c;而是数据准备——这个看似简单的环节却能消耗开发者50%以上的时间。当面对Kaggle上COVID-19 Radiography Database这类包含多类别、带掩码的…

作者头像 李华
网站建设 2026/5/25 1:23:10

第四十八周学习周报

摘要 今日学习了模拟壁面导热的三种方法&#xff08;实体网格、薄壁模型、壳导热&#xff09;&#xff0c;重点掌握了壳导热模型的原理、设置和限制条件&#xff0c;以及热量在多方向传递的特性。AbstractToday, I learned three methods for simulating wall heat conduction …

作者头像 李华