CAS(比较并交换)学习CAS实现原子性+volatile实现可见性,cas与synchronized比较的优缺点
生活随笔
收集整理的這篇文章主要介紹了
CAS(比较并交换)学习CAS实现原子性+volatile实现可见性,cas与synchronized比较的优缺点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、CAS底層原理?
自旋鎖(cas思想)+unsafe類,保證原子性靠的是unsafe類
1.首先可以看到:
atomicInteger.getAndIncrement();getAndIncrement()的底層是
public final int getAndIncrement() {return unsafe.getAndAddInt(this, valueOffset, 1);}this指的是當前對象,valueoffset是偏移量(因為unsafe類是根據內存偏移地址獲取數據),1是自增值
2.下面看下getAndAddInt(this, valueOffset, 1);底層
public final int getAndAddInt(Object var1, long var2, int var4) {int var5;do {var5 = this.getIntVolatile(var1, var2);} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));return var5;}var1:AtomicInteger對象本身
var2:該對象值的引用地址
var4:需要變動的數量
var5:是通過var1、var2找出的主內存中真是的值
用該對象當前的值與var5比較:
如果相同,更新var5+var4并返回true;
如果不相同,繼續取值比較直到更細完成;
2、通過下面例子來更好的理解一下:
3、cas與syncronized比較
為什么要用cas而不用syncronized?
因為syncronized加鎖同一時間段只能有一個線程訪問,一致性得到了保證,但是并發性下降,cas底層用do while來比較更新,既保證了一致性也保證了并發性。
4、cas的缺點?
1、循環時間長,cpu開銷大(do while如果cas失敗,一直嘗試,長時間不成功,會造成cpu開銷很大)
2、只能保證一個共享變量的原子操作(多個變量不能保證,只能用加鎖)
3.引出了ABA問題(最重要的)ABA問題分析與解決
總結
以上是生活随笔為你收集整理的CAS(比较并交换)学习CAS实现原子性+volatile实现可见性,cas与synchronized比较的优缺点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《卧龙:苍天陨落》新情报:有中国员工参与
- 下一篇: 强度6.2级 阿富汗地震已造成940人死