CAS是什么?彻底搞懂CAS

article/2025/9/29 15:51:17

CAS(Compare-And-Swap),它是一条CPU并发原语,用于判断内存中某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。

CAS基本原理

CAS并发原语体现在Java中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现CAS汇编指令。这是一套完全依赖于硬件的功能,通过它实现了原子操作。由于CAS是一种系统原语,原语属于操作系统用语,原语由若干指令组成,用于完成某个功能的一个过程,并且原语的执行必须是连续的,在执行过程中不允许被终端,也就是说CAS是一条CPU的原子指令,不会造成所谓的数据不一致的问题

JDK1.5之后,Java类库才开始使用CAS才开始使用CAS操作,,HotSpot虚拟机在内部对这些方法做了特殊的处理,即时编译出来的结果就是一条平台相关的处理器CAS指令,或者可以认为是无条件内联进去了,不过Unsafe类本来就不是给用户程序调用的类(Unsafe::getUnsafe()的代码里面限制了只有启动类加载器加载的Class才能访问它)

unsafe类分析

如下是Unsafe类中的compareAndSwapInt,是一个本地方法,在unsafe.cpp中
在这里插入图片描述

CAS具体应用
V;内存中地址存放的实际值

O:预期值(旧值)

N:新值,表示我们准备更新V的值

当执行CAS后,如果V == O ,即旧值与内存中实际值相等,表示上次修改后没有任何线程再次修改此值,因此可以将N替换到内存中。

如果 V != O,表示该内存中的值已经被其他线程做了修改,所以无法将N替换,返回最新的值V

当多个线程使用CAS操作一个变量时,只有一个线程会成功,并成功更新变量值,其他线程均会失败。失败线程会重新尝试或将线程挂起(阻塞)

CAS实现原子操作三大问题

CAS的ABA问题

CAS算法实现的一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差类会导致数据的变化,比如线程M从内存位置W取出值A,这时N也取出A,N操作后A变成了B,然后N将B又变回A,这时线程M在CAS操作时发现内存中仍然是A,然后M执行成功,M虽然执行成功,但实际上就出现了ABA问题。

解决方案:Java1.5开始,JDK的Atomic包里提供了一个类AtomicStampedRefernce来解决ABA问题。这个类的compareAndSet方法的作用是首先检查当前引用是否等于预期引用,并且检查标志stamped是否为预期标志,如果全部一致,则继续。

CAS的循环时间长开销大问题

自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销,如果JVM能支持处理器提供的pause指令,那么效率会有一定的提升

pause指令的两个作用:

第一,它可以延迟流水线执行指令,使CPU不会消耗过多的执行资源

第二,它可以避免在退出循环的时候因内存顺序冲突而引起CPU流水线被清空

CAS的只能保证一个共享变量的原子操作问题

当对一个共享变量进行原子操作,循环CAS可以解决,但是如果是多个共享变量呢?循环CAS无法解决这个问题。

取巧的话就是合并共享变量:i=2,j=a -> ij=2a; 如此合并就可以操作了

解决方案:Java 5 开始,JDK提供了AtomicReference类来保证引用对象之间的原子性,就可以把多个变量放在一个对象进行CAS操作


http://chatgpt.dhexx.cn/article/ovgXUki4.shtml

相关文章

(一)CAS是什么?

前言 随着企业数字化转型的不断发展,应用系统越来越多,每个系统都有一套用户系统,用户在操作不同的系统时,需要多次登录,而且每个系统的账号都不一样,这对于用户来说,很不方便。这时候要做到 在…

CAS是什么

目录 没有CAS之前 使用CAS之后 CAS是什么 CAS底层原理:unsafe类 Unsafe new AtomicInteger().getAndIncrement()流程 CAS缺点 1 循环时间长开销很大 2 ABA问题 ABA代码演示 如何解决?:通过AtomicStampedReference版本号 3不能保…

CAS 是什么?

CAS又称 自旋锁、无锁,是一种乐观锁 compare and swap 的缩写 意为: 比较并交换 , 实现并发算法的常用技术 , 就是说我不用加锁 , 也能保证 ( 加锁会影响效率,可以考虑使用原子操作类 ) 原子性 , 当多个线程尝试使用 CAS 同时更新同一个变量时&#xf…

什么是CAS

文章目录 一、CAS是什么二、CAS 可以解决什么问题三、CAS实现原子操作的问题 一、CAS是什么 CAS的全称为compare and swap 或者compare and exchange,意思为比较和交换。CAS流程如下: 假设我们有一个共享变量i,初始值为0。我们现在要对i进行加1的操作…

metasploit图形化工具 Armitage

Metasploit默认使用PostgreSQL存储渗透测试所需的数据表,所以在启动Armitage之前需要首先启动PostgreSQL服务和Metasploit服务,然后再启动armitage,弹出对话框询问是否连接Metasploit的RPC信道,依次选择“connect”、“是”选项。…

ARM..

一 关于arm 1 arm的三种含义 (1) 一个公司的名称 Advanced RISC Machine (2) 一类处理器的统称 (3) 一种技术的名称 (RISC) ARM是以一家设计处理器的公司,这家公司设计的处理器统称为ARM,它们使用的指令集是RISC(精简指…

01-Introducing the Arm architecture

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈目录 1、Overview2、About the Arm architecture3、架构(architecture)到底是什么意思呢

傻瓜式渗透Armitage的使用

目录 Armitage的基本介绍 安装 1 启动Armitage 1、Armitage启动前初始化: 2、Armitage启动的三种方法: 2 使用Armitage生成被控端和主控端 1、Armitage的工作界面: (1)区域1: (2&#…

Kali Linux Armitage生成被控端和主控端

目录 说明使用 Armitage生成被控端和主控端 说明 按照《Kali Linux2 网络渗透测试实践指南 第二版 》第八章操作 仅供学习讨论使用,请勿进行非法操作 使用 Armitage生成被控端和主控端 选中“payload”, 然后选择“windows” ➡️“meterpreter”&…

[architecture]-arm exclusive机制介绍

关键词:spinlock,原子操作,独占访问,exclusive,inclusive,mutex,Semaphore,互斥,同步,同步原语 快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/…

使用Armitage进行渗透测试与键盘记录

0x00:Armitage是一款基于GUI开发的图形化渗透工具,对于渗透测试而言能够快速了解网络的拓扑以及主机状态,其功能丰富,是每一位渗透测试者的必备武器;今天我就来演示如何在Armitage下入侵纯在漏洞的XP系统,废…

在2022年的kali linux上面安装armitage

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在2022年的kali linux上面安装armitage 前言一、armitage是什么?二、安装步骤1.官网下载2.build安装3.配置数据库 总结 前言 提示:在2022年的kali li…

ARMv8 architecture里的Memory aborts

在AArch64 Virtual Memory System Architecture中,有以下几种机制会导致PE在访问memory失败时产生exceptions。 Debug exception: An exception caused by the debug configuration.Alignment fault: An Alignment fault is generated if the address used for a m…

Armitage图形化前端

开源免费图形前端 ● 作者自称是众多不会使用metasploit的安全专家之一(命令行) ● MSF基于命令行,缺少直观的GUI图形用户接口 Armitage只是调用MSF的漏洞利用能力 ● Armitage的每一个GUI操作都可以对应MSF中的一条命令 红队团队合作模拟…

Kali Linux 使用Armitage

目录 说明安装扫描网络Quick Scan (OS detect)输入网段扫描结果 图形化ms17_010先扫描 auxiliary再攻击被渗透图形化metaspliotMeterpreter 5类任务:计算系统密码的hash值 Browser filesLog Keystrokes 写在最后 Armitage是一款用Java为Metasploit编写的图形化操作界…

【Arm架构】什么是Arm?

1 Arm architecture Arm 架构是世界上最流行的处理器架构之一。每年有数十亿台基于 Arm 的设备出货。 A-Profile (Applications) R-Profile (Real-Time) M-Profile (Microcontroller) 高性能场景 实时系统 小型,高能效设备 用于运行复杂的操作系统&#xff0…

「Arm Arch」 初识 Arm

本文源自《书香度年华》「ARM 架构专栏」,是一系列由浅入深、循序渐进的文章,文章之间有一定的前后关联性,所以按顺序阅读,建议收藏专栏。 目录 前言 一、架构概述 1.1 冯诺依曼架构 1.2 哈佛架构 1.3 Arm 架构 二、架构图谱…

Armitage的介绍和使用

目录 1.1Armitage的介绍与原理 1.1.2 Armitage的主要功能包括: 1.2 启动Armitage 1.2.1 Armitage启动的三种方法: 1.2.2 Armitage启动前初始化: 1.3 使用Armitage生成被控端和主控端 1.3.1 Armitage的工作界面: 1.3.2 使用…

ARM 架构是什么?

ARM(Advanced RISC Machines)架构是一种处理器架构,它是一种精简指令集计算机(RISC)架构。ARM架构最初由ARM Holdings(现在是SoftBank Group的子公司)开发,并在1980年代末和1990年代…

Armitage的使用

一.简介 Armitage是一个攻击管理工具,它以图形化方式实现了Metasploit框架的自动化攻击。Armitage采用Java构建,拥有跨平台特性。 二.使用 (一)基本原理 1.入门 1.1开启Armitage 在命令行输入armitage命令会弹出如下对话框&…