日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CAS(比较并交换)学习CAS实现原子性+volatile实现可见性,cas与synchronized比较的优缺点

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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比较的优缺点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。