首页 > 其他分享 >CAS原理

CAS原理

时间:2022-10-24 22:36:01浏览次数:47  
标签:前缀 CAS lock 指令 volatile 内存 原理 处理器


compareAndSet()方法调用简称为CAS。JDK文档对该方法的说明如下:如果当前状态值等于预期值,则以原子方式将同步状态设置为给定的更新值。此操作具有volatile读和写的内存语义。

编译器不会对volatile读与volatile读后面的任意内存操作重排序;编译器不会对volatile写与volatile写前面的任意内存操作重排序。组合这两个条件,意味着为了同时实现volatile读和volatile写的内存语义,编译器不能对CAS与CAS前面和后面的任意内存操作重排序。

程序会根据当前处理器的类型来决定是否为cmpxchg指令添加lock前缀。如果程序是在多处理器上运行,就为cmpxchg指令加上lock前缀(Lock Cmpxchg)。反之,如果程序是在单处理器上运行,就省略lock前缀(单处理器自身会维护单处理器内的顺序一致性,不需要lock前缀提供的内存屏障效果)。

intel的手册对lock前缀的说明如下。

1)确保对内存的读-改-写操作原子执行。在Pentium及Pentium之前的处理器中,带有lock前缀的指令在执行期间会锁住总线,使得其他处理器暂时无法通过总线访问内存。很显然,这会带来昂贵的开销。从Pentium 4、Intel Xeon及P6处理器开始,Intel使用缓存锁定(Cache Locking)来保证指令执行的原子性。缓存锁定将大大降低lock前缀指令的执行开销。

2)禁止该指令,与之前和之后的读和写指令重排序。

3)把写缓冲区中的所有数据刷新到内存中。

上面的第2点和第3点所具有的内存屏障效果,足以同时实现volatile读和volatile写的内存语义。

concurrent包的实现示意图:

CAS原理_重排序

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星

CAS原理_重排序_02


标签:前缀,CAS,lock,指令,volatile,内存,原理,处理器
From: https://blog.51cto.com/u_7841967/5791477

相关文章

  • react中useTransition的执行原理
    _版本:v18.2.0本文为我花了大半年的时间潜心研究所写,转载请注明出处,谢谢本文假设你读了本系列中的《触发onClick,react会执行哪些操作》、《react中suspense组件是如何重......
  • Redis Cluster 原理说的头头是道,这些不懂就是纸上谈兵
    RedisCluster集群相关配置,使用集群方式的你必须重视和知晓。别嘴上原理说的头头是道,而集群有哪些配置?如何配置让集群快到飞起,实现真正的高可用却一头雾水,通过下面这些配置......
  • Vue.nextTick核心原理
    相信大家在写vue项目的时候,一定会发现一个神奇的api,Vue.nextTick。为什么说它神奇呢,那是因为在你做某些操作不生效时,将操作写在Vue.nextTick内,就神奇的生效了。那这是什么......
  • rxjs Observable 设计原理背后的 Pull 和 Push 思路
    Observables顾名思义,是可以被观察的事务。在Rxjs的上下文里,Observable会随着时间的推移,在某个时间点产生数据。Observables可以:不停地(永远)产生值,比如interval操作......
  • 硬件加密芯片介绍 及 加密芯片选择(加密IC) 加密芯片原理
    前端时间有研究多款加密芯片,加密算法实现,以及破解可能,也有一些个人的观点,仅供参考; 一,加密芯片的来源及工作流程:市面上的加密芯片,基本都是基于某款单片机,使用I2C或SPI等......
  • Vue 中 nextTick 的实现原理是什么
    vue中有一个较为特殊的API,nextTick。根据官方文档的解释,它可以在DOM更新完毕之后执行一个回调,用法如下://修改数据 vm.msg = 'Hello' //DOM还没有更新 Vue.......
  • 浏览器原理
     浏览器重绘与重排的区别?重排:部分渲染树(或者整个渲染树)需要重新分析并且节点尺寸需要重新计算,表现为重新生成布局,重新排列元素重绘:由于节点的⼏何属性发生改变或者......
  • el-cascader组件根据最后一级向上找到父级并设置默认值
    vue+ elementUI项目中,el-cascader级联选择器使用频率非常高,一些基本使用方法可以参考elementUI官方文档,本文主要研究当接口只返回最后一级id时,如何向上找出所有父级数据,......
  • Castle 整合.NET Remoting
    微软以前使用COM/DCOM的技术来处理分布式系统架构,通过Client端的Proxy代理程序来呼叫远程Server机器上的对象。.NETFramework则使用.NETRemoting或WebServices技术来实作......
  • 测温仪器的原理知多少?
    测温仪器的原理知多少?测温枪也叫测温仪,这个东西有可能对我们来说都比较陌生,它主要是应用红外测温技术提供生产生活中的温度测量,所以又被称为红外测温枪。这项技术在产品质......