CAS

CAS

Compare And Swap
借助了cpu的指令,compxchg,具体实现原理
V是读取内存的值,A是寄存器里面的值,value是要更新的值,JDK会通过compxchg指令,判断寄存器里面A的值是否和V相等,如果相等,直接更新A的值为value,如果不相等,就将内存的值V更新到寄存器的A,再重试
具体代码如下:

在这里插入图片描述

CAS存在三个问题

  1. ABA问题
    可以通过增加版本号,来解决ABA问题,如1A,2B,3A
    JDK 1.5版本提供了AtomicStampedReference 来解决这个问题,原理是compareAndSet首先检查 当前引用和当前标志与预期引用和预期标志是否都相等,如果相等,则更新

  2. 自旋重试消耗CPU CAS如果竞争很激烈,会一直重试

  3. 只能保证一个变量的原子操作

寄存器的结构
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

计算机由CPU(运算器和控制器),IO(输入输出),存储器(磁盘和主存)

CPU (Central Processing Unit)
内存即RAM,随机存取存储器(Random Access Memory)
硬盘即HDD(Hard Disk Drive)
运算器:主要由算术逻辑单元(ALU)、累加寄存器(ACC)、乘商寄存器(MQ)状态存储器、通用存储器等组成。
控制器:主要由控制单元(CU)、指令寄存器(IR)、程序计数器(PC)组成。CU主要执行指令的作用,IR一般存放当前欲执行指令、PC存放下一条指令的地址。
存储器:主要由存储体 M,地址寄存器(MAR)、数据寄存器组成(MDR)。MAR一般反映的是存储单元的个数,而MDR反映的是存储的字长。

CPU三级缓存

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

https://blog.youkuaiyun.com/qq_38877888/article/details/103118068

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值