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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 自动化部署代码【gitlab jenkins 华为云】
  • 【2024高教社杯国赛C题】数学建模国赛建模过程+完整代码论文全解全析
  • 2409wtl,wtl与ddx
  • vscode从本地安装插件
  • 数据集 Ubody人体smplx三维建模mesh-姿态估计 >> DataBall
  • Win10磁盘出现小锁和感叹号的解决办法
  • Nexus配置npm私服
  • 深度学习(九)-图像形态操作
  • UDP通信实现
  • 有希带你深入理解指针(4)
  • 软考-高级架构师Keywords(上半部分)
  • sping boot 基于 RESTful 风格,模拟增删改查操作
  • 伽罗华域GF的简单计算
  • 『功能项目』战士的A键连击【33】
  • 《深入探究 <侠盗猎车手 5>(GTA5)的 C++ 代码世界》
  • [nginx文档翻译系列] 控制nginx
  • 《剑指offer》分解让复杂问题更简单
  • 230. Kth Smallest Element in a BST
  • Codepen 每日精选(2018-3-25)
  • Fundebug计费标准解释:事件数是如何定义的?
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • pdf文件如何在线转换为jpg图片
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Web Storage相关
  • 程序员该如何有效的找工作?
  • 记一次用 NodeJs 实现模拟登录的思路
  • 警报:线上事故之CountDownLatch的威力
  • 力扣(LeetCode)357
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 怎么将电脑中的声音录制成WAV格式
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​ubuntu下安装kvm虚拟机
  • #NOIP 2014# day.2 T2 寻找道路
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)虚拟机的安装与使用,linux系统安装
  • (差分)胡桃爱原石
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (四) Graphivz 颜色选择
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .naturalWidth 和naturalHeight属性,
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net 反编译_.net反编译的相关问题
  • .NET 中让 Task 支持带超时的异步等待
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET轻量级ORM组件Dapper葵花宝典
  • .net通过类组装数据转换为json并且传递给对方接口
  • @ModelAttribute使用详解
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [2024-06]-[大模型]-[Ollama]- WebUI
  • [AIGC] MySQL存储引擎详解
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作