首页 > 其他分享 >CAS与原子操作

CAS与原子操作

时间:2024-09-07 19:21:39浏览次数:13  
标签:std CAS 原子 atomic memory 操作 order

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

标签:std,CAS,原子,atomic,memory,操作,order
From: https://blog.csdn.net/2303_77208351/article/details/141970391

相关文章

  • django orm操作
    目录ORM是什么ORM的工作原理:ORM的优点:常见的ORM框架:创建DjangoORM模型类示例模型类步骤1:创建迁移文件步骤2:应用迁移到数据库步骤3:查看迁移的数据库表结构常见问题要数据库中检查常用字段类型元选项(MetaOptions)简化操作orm常见的模型操作模型操作新增数据save()方法c......
  • 【正点原子K210连载】第二十九章 音频录制实验 摘自【正点原子】DNK210使用指南-CanMV
    第二十九章音频录制实验本章将介绍CanMV下的音频录制通过CanMV提供的模块便能快速地实现音频录制。通过本章的学习,读者将学习到CanMV下控制I2S获取音频数和audio模块的使用。本章分为如下几个小节:29.1maix.I2S模块及audio模块介绍29.2硬件设计29.3程序设计29.4运行验证29......
  • 【正点原子K210连载】第三十章 照片拍摄实验 摘自【正点原子】DNK210使用指南-CanMV版
    第三十章照片拍摄实验在前面的章节中,已经了解了如何在CanMV下获取摄像头输出的图像数据并在LCD上进行显示,同时也了解了如何解码文件系统中的图像文件然后在LCD上进行显示,本章将通过照片拍摄实验,介绍如何通过CanMV将摄像头输出的图像数据进行图像编码保存到文件系统中。通过本章的......
  • g++如何判断>>是模板结束还是右移操作符
    intro在使用模板声明中,有一个经典的问题就是如何区分模板声明中的">>"是右移操作符还是一个模板声明的结束标志。好在新的C++标准削弱了这个很强的限制,而是允许reasonable的、根据上下文对符号进行不同的解析。C++11improvesthespecificationoftheparsersothatmultipl......
  • ArcMap批量附色操作,并保存mxd
    ArcMap批量附色操作,并保存mxd1、对单文件操作1、保存当前ArcMap中打开的shp文件为mxd文件打开label_shp_root中的任意一个shp文件夹保存成mxd文件2、对当前在arcmap中打开的shp文件应用color配色color配色是手动设置好一个shp文件夹的配色方案并保存成mxd文件应用color.......
  • 嵌入式Linux系统开发学习--Linux系统及其操作部分
    0.前言    由于毕业了工作原因,转行做嵌入式了,现在开始学习嵌入式Linux系统开发,后面也会学习单片机部分的知识,我也会陆续的将我的学习历程发送出来,迟迟不发文就是工作太忙了,现在进了家小企业,我负责的模块公司也没有人会,虽然是开源的,但是网上一堆牛鬼蛇神的资料,让我吃了......
  • Linux网络操作的通用接口:Socket是怎么使用的?
    前言如果你在工作学习中经常见到socket相关的字眼,但总是未曾深究过其本质,相信这篇文章能够给你带来一些帮助。网络是计算机体系中绕不开的一环,而socket作为计算机网络体系的重要组成部分,也具备着相当重要的地位。但很多时候,虽然在书本或课堂上了解了TCP、IP等基础网络内容......
  • AWTK fscript 中的位操作扩展函数
    fscript是AWTK内置的脚本引擎,开发者可以在UIXML文件中直接嵌入fscript脚本,提高开发效率。本文介绍一下fscript中的位操作扩展函数位操作扩展函数1.&位与运算。原型n1&n2示例print(1&1)2.|位或运算。原型n1|n2示例print(|(1,2))3.~按位取反运算。原型~(n1)示例p......
  • 深入剖析 FreeRTOS:实时操作系统的卓越之选
    摘要: 本文全面深入地探讨了FreeRTOS,这一广泛应用于嵌入式系统的实时操作系统。详细阐述了FreeRTOS的起源与发展历程,介绍其基本概念、特点及工作原理。深入分析了FreeRTOS的内核架构、任务管理、内存管理、中断处理等关键组成部分。探讨了FreeRTOS在物联网、工业控制、......
  • opencv-python学习笔记2-opencv基本操作
    目录 一、opencv架构:(1)OpenCV的主要模块包括:(2)OpenCV的架构特点:(3)OpenCV的应用场景:二、图像输入输出模块imgcodecs: a.imread:b. imwrite:三、opencv界面编程:(1)创建窗口:(2)显示图像:(3)添加滑块:(4)处理鼠标事件:(5)等待用户输入(6)销毁窗口四、单窗口显示多图片:(1)np.hstack()......