首页 > 其他分享 >CAS原理剖析

CAS原理剖析

时间:2024-08-31 17:14:51浏览次数:10  
标签:var5 var4 var1 var2 CAS 剖析 int 原理

CAS原理剖析

compare and swap也就是比较和交换,他是一条CPU的并发原语。

他在替换内存的某个位置的值时,首先查看内存中的值与预期值是否一致,如果一致,执行替换操作。这个操作是一个原子性操作。

Java中基于Unsafe的类提供了对CAS的操作的方法,JVM会帮助我们将方法实现CAS汇编指令。

但是要清楚CAS只是比较和交换,在获取原值的这个操作上,需要你自己实现。

以java.util.concurrent.atomic.AtomicInteger#incrementAndGet为例来进行讲解:

public final int incrementAndGet() {
        return unsafe.getAndAddInt(this, valueOffset, 1) + 1;
 }

sun.misc.Unsafe#getAndAddInt

注意: 这里面是 do while循环,也就是说,直到替换成功了才会退出,如果一直替换不成功,则会一直进行自旋操作。

public final int getAndAddInt(Object var1, long var2, int var4) {
        int var5; // 原始值
        do {
            var5 = this.getIntVolatile(var1, var2); // 获取当前var2内存位置的原始值
            
            // var5:原始值,var5 + var4:目标值
            // 我们要将原始值替换成目标值
            // var1可以理解成我们当前字段
        } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));

        return var5; // 返回原始值
}

下面这玩意就没啥可看的了

public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);

CAS的缺点:CAS只能保证对一个变量的操作是原子性的,无法实现对多行代码实现原子性。

CAS的问题

​ ABA问题,解决方式:可以使用追加版本号的方式,AtomicStampeReference; 还可以使用AtomicMarkableReference打标记的方式。

标签:var5,var4,var1,var2,CAS,剖析,int,原理
From: https://www.cnblogs.com/dongyaotou/p/18390508

相关文章

  • AQS源码剖析
    AQS源码剖析AQS就是AbstractQueuedSynchronizer抽象类,AQS其实就是JUC包下的一个基类,JUC下的很多内容都是基于AQS实现了部分功能,比如ReentrantLock,ThreadPoolExecutor,CountDownLatch,Semaphore,CyclicBarrier等等都是基于AQS实现。首先AQS中提供了一个由volatile修饰,并且采用CAS方......
  • 计算机组成原理教学小程序计算机毕设
    博主介绍:✌专注于VUE,小程序,安卓,Java,python,物联网专业,有16年开发经验,长年从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。研究的背景:计算机组成原理教学小程序的研究背景主要源于计算机科学教育中计算机组成原理课......
  • 【网络】P2P打洞原理
    1.引入如果你折腾过NAS或者BT下载等等玩意,可能听说过“P2P打洞”这一技术名词。简单来说,P2P打洞可以让我们直接在外网访问内网的设备,从而让没有公网IP的家庭设备也能获得“公网直连”的速度。比如绿联、极空间等国产NAS的客户端,在外网访问的时候,都会先尝试P2P打洞让你和你的NAS实......
  • 【网络编程通关之路】 Tcp 基础回显服务器(Java实现)及保姆式知识原理详解 ! ! !
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • 【大模型理论篇】RoPE旋转位置编码底层数学原理分析
    1.位置编码对于NLP模型的作用             位置编码(PositionalEncoding)在大模型(例如Transformer架构)中起到了非常重要的作用。没有位置编码的信息,模型会丧失序列的顺序信息,导致模型退化成一个简单的“词袋模型”(BagofWordsmodel)。        在Tra......
  • 探索音频处理中的频率分辨率:原理、影响与应用
    目录什么是频率分辨率?频率分辨率对音频处理的影响频率分辨率的实际应用与选择结论在音频信号处理领域,频率分辨率是一个至关重要的概念,它直接影响信号的分析和处理结果。无论是在语音识别、噪声抑制、音乐信号处理,还是在更多复杂的音频处理应用中,理解和选择适当的频率......
  • 【网络】P2P打洞原理
    本文首发于❄️慕雪的寒舍1.引入如果你折腾过NAS或者BT下载等等玩意,可能听说过“P2P打洞”这一技术名词。简单来说,P2P打洞可以让我们直接在外网访问内网的设备,从而让没有公网IP的家庭设备也能获得“公网直连”的速度。比如绿联、极空间等国产NAS的客户端,在外网访问的时......
  • Android源码bta_gattc_start_discover剖析
    1.前言当BLE设备作为GATT客户端(GATTClient)连接到GATT服务器(GATTServer)后,它通常需要执行发现过程以了解服务器的GATT数据库结构。这包括服务(Services)、特征(Characteristics)和描述符等。bta_gattc_start_discover 函数正是用于启动这一过程的。2.工作流程连接建立:首先,GAT......
  • 详细了解ThreadLocal底层原理及作用
    深入ThreadLocal底层原理一、ThreadLocal的作用二、ThreadLocal的底层原理三、可能存在的问题四、总结一、ThreadLocal的作用ThreadLocal是Java中一个用于实现线程局部变量的类。它的主要作用是在每个线程中创建一个变量的副本,这样每个线程可以独立地访问自己的副本......
  • 第一篇:爬虫基本原理
    爬虫是什么 1、什么是互联网?互联网是由网络设备(网线,路由器,交换机,防火墙等等)和一台台计算机连接而成,像一张网一样。2、互联网建立的目的?互联网的核心价值在于数据的共享/传递:数据是存放于一台台计算机上的,而将计算机互联到一起的目的就是为了能够方便彼此之间的......