CAS与原子操作

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


http://www.ppmy.cn/news/1522279.html

相关文章

linux 查看java 进程

在 Linux 中,可以使用以下几种常用方法来查看运行中的 Java 进程: 1. ps 命令 ps 是最常用的查看进程的命令。你可以使用以下命令查看 Java 进程的 PID: ps -ef | grep java-e:显示所有进程。-f:显示完整格式的信息…

斗破C++编程入门系列之二十一:数组、指针和字符串:数组的存储与初始化、对象数组、数组作为函数参数(一星斗师)

斗破C目录: 斗破C编程入门系列之前言(斗之气三段) 斗破C编程入门系列之二:Qt的使用介绍(斗之气三段) 斗破C编程入门系列之三:数据结构(斗之气三段) 斗破C编程入门系列之…

产业生态构建,产业运营服务如何促进上下游协同?

在当今竞争激烈的市场环境中,产业生态的构建成为了企业发展的关键。而产业运营服务作为推动产业生态发展的重要力量,在促进上下游协同方面发挥着至关重要的作用。 首先,产业运营服务通过搭建交流合作平台,促进上下游企业之间的沟通…

2024自动化测试面试真题(附答案)!

一、编程语法题 1 、 python 有哪些数据类型 python 数据类型有很多,基本数据类型有整型(数字)、字符串、元组、列表、字典和布尔类型等 2 、怎么将两个字典合并 调用字典的 update 方法,合并 2 个字典。 3 、 json.l python 如…

uboot:配置编译

了解BSP 在嵌入式系统中,BSP(Board Support Package)被称为板级支持包或板级支持软件。它是一组针对特定硬件平台的软件支持包,为开发人员提供了一个统一的接口层,简化了硬件和软件之间的交互。BSP的主要功能和特点如…

HarmonyOS开发实战( Beta5版)不要使用函数/方法作为复用组件的入参规范实践

概述 在滑动场景下,常常会对同一类自定义组件的实例进行频繁的创建与销毁。此时可以考虑通过组件复用减少频繁创建与销毁的能耗。组件复用时,可能存在许多影响组件复用效率的操作,本篇文章将重点介绍如何通过组件复用四板斧提升复用性能。 组…

Cozer必备!一站式解锁扣子全网最全插件集锦(五)

俗话说,工欲善其事必先利其器! 用过Coze的朋友都知道,插件在Coze里的重要性。插件库就相当于武器库,一个好的插件,就相当于一件趁手的兵器,可以让你事半功倍! 程哥精心整理了Coze最常用和好用…

Vue 3.5 新特性解析

在Vue 3.5中,几个新特性值得关注,它们将极大简化和增强你的开发体验。让我们逐一深入了解这些特性。 1. defineProps支持解构 在Vue 3.5中,defineProps现在支持解构。你可以直接从defineProps中解构出需要的属性,而不必像以前一…