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

相关推荐
迷茫不知归路15 小时前
操作系统实验习题解析 上篇
c++·算法·操作系统·实验课设
LUCIAZZZ1 天前
JVM之内存管理(一)
java·jvm·spring·操作系统·springboot
ssslar2 天前
MIT XV6 - 1.6 Lab: Xv6 and Unix utilities -uptime
操作系统·risc-v·xv6
LUCIAZZZ3 天前
JVM之内存管理(二)
java·jvm·后端·spring·操作系统·springboot
尸僵打怪兽3 天前
软考错题集
java·python·计算机网络·操作系统·c·软考·计算机组成原理
望获linux5 天前
工业软件自主化突围:RTOS 如何打破 “协议栈 - 控制器” 生态垄断
linux·人工智能·操作系统·开源软件·嵌入式软件·工业软件
LUCIAZZZ5 天前
ElasticSearch基本概念
java·大数据·elasticsearch·搜索引擎·中间件·操作系统
望获linux6 天前
实时操作系统:航空电子系统的安全基石还是创新枷锁?
人工智能·安全·机器人·操作系统·开源软件·rtos·飞行器
LUCIAZZZ6 天前
简单介绍分布式定时任务XXL-JOB
java·spring boot·分布式·spring·操作系统·定时任务
LUCIAZZZ7 天前
Caffeine快速入门
java·后端·spring·缓存·操作系统·springboot