CAS与原子操作

什么是原子操作?
  • 原子操作是一种在执行过程中不会被中断的操作。它要么完全执行成功,要么完全不执行,确保在操作完成之前其他线程不会看到操作的中间状态。
原子操作的实现
  1. CAS

    • CAS是由 CPU 提供的原子指令 。在硬件级别 上确保操作的原子性。不涉及上下文切换,性能高
    • 主要用途:单个变量更新
  2. posix锁机制:mutex互斥锁、spinlock自旋锁

    • 互斥锁依赖CAS,且涉及上下文切换,开销大
    • 主要用途:保护代码临界区,涉及多条cpu指令和变量的更新
  3. std::atomic

    • C++ 提供了 std::atomic 类,即原子变量 。它封装了底层的原子指令c++对原子变量的操作确保原子性

    • 基于cas实现

    • std::atomic 的内存序

    • std::atomic 还提供了内存序(memory ordering)选项,这决定了原子操作的可见性和顺序约束。例如:

    • memory_order_relaxed:不提供额外的同步或顺序保证。

    • memory_order_acquire:保证在原子操作之前的操作对当前线程可见。

    • memory_order_release:保证在原子操作之后的操作对其他线程可见。

    • memory_order_acq_rel:同时保证 acquire 和 release 语义。

    • memory_order_seq_cst:提供最严格的顺序保证。

推荐学习 https://xxetb.xetslk.com/s/p5Ibb

相关推荐
馒头6752 小时前
openEuler 向量数据库:Milvus 相似度搜索性能测试
操作系统
不秃头的帅哥5 小时前
程序地址空间(基于c++和linxu的一些个人笔记
linux·开发语言·c++·操作系统·内存空间
落尘2985 小时前
openEuler操作系统环境:研发人脸识别软件与系统性能评估
操作系统
落尘2985 小时前
面向openEuler操作系统:OCR软件应用部署流程、性能评测
操作系统
鱼鱼块6 小时前
揭开浏览器底层的秘密:为什么一个 Chrome 能跑这么快又这么稳?
架构·操作系统·浏览器
sweet丶17 小时前
iOS内存映射技术:mmap如何用有限内存操控无限数据
ios·操作系统·app
阿齐Archie1 天前
万物可运行:openEuler 的跨生态兼容力实验
操作系统
做人不要太理性1 天前
【Linux系统】ext2文件系统
大数据·linux·操作系统·文件系统
_OP_CHEN1 天前
【Linux系统编程】(十一)从硬件基石到软件中枢:冯诺依曼体系与操作系统深度解析
linux·运维·服务器·操作系统·进程·冯诺依曼体系结构·os
云边有个稻草人2 天前
openEuler容器化实践:Docker部署全场景落地指南
操作系统