原子操作的实现原理

实现方式:基于缓存加锁和总线加锁。

?通过总线加锁
(1)所谓总线锁就是使用处理器提供的一个lock#信号,当一个处理器在总线上输出此信号时,其他处理器的请求会被阻塞住,那么该处理器可以独占共享内存。
(2)但总线锁定把cpu和内存之间的通信锁住了,这使得锁定期间,其他处理器不能操作其他内存地址的数据,所以开销比较大。

?使用缓存加锁
所谓“缓存锁定”是指内存区域如果被换存在处理器的缓存行中,并且在lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不在总线声言lock#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性➡️➡️因为缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存,当其他处理器回写已被锁定的缓存行的数据时,会使缓存行无效。

?CAS实现原子操作的三大问题
1)ABA问题。描述:原来A 变为B 再变为A,使用cas检查时会发现值没变。 解决方法:在变量面前追加版本号。
2)循环时间长。 解决方法:使用jvm提供的pause指令。 作用1️⃣延迟流水线执行指令,使cpu不会消耗过多的执行资源。2️⃣避免在退出循环的时候因内存顺序冲突而引起cpu流水线被清空。
3)只能保证一个共享变量的原子操作。 解决方法:把多个共享变量合并成一个。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值