久久综合九色综合97婷婷-美女视频黄频a免费-精品日本一区二区三区在线观看-日韩中文无码有码免费视频-亚洲中文字幕无码专区-扒开双腿疯狂进出爽爽爽动态照片-国产乱理伦片在线观看夜-高清极品美女毛茸茸-欧美寡妇性猛交XXX-国产亚洲精品99在线播放-日韩美女毛片又爽又大毛片,99久久久无码国产精品9,国产成a人片在线观看视频下载,欧美疯狂xxxx吞精视频

有趣生活

當前位置:首頁>職場>ca和cap有什么不同(什么是CAS怎樣工作的)

ca和cap有什么不同(什么是CAS怎樣工作的)

發布時間:2024-01-24閱讀(9)

導讀在計算機科學中,比較和交換(ConmpareAndSwap)是用于實現多線程同步的原子指令它將內存位置的內容與給定值進行比較,只有在相同的情況下,將該內存位....

在計算機科學中,比較和交換(Conmpare And Swap)是用于實現多線程同步的原子指令 它將內存位置的內容與給定值進行比較,只有在相同的情況下,將該內存位置的內容修改為新的給定值 這是作為單個原子操作完成的 原子性保證新值基于最新信息計算; 如果該值在同一時間被另一個線程更新,則寫入將失敗 操作結果必須說明是否進行替換; 這可以通過一個簡單的布爾響應(這個變體通常稱為比較和設置),或通過返回從內存位置讀取的值來完成(摘自維基本科),我來為大家講解一下關于ca和cap有什么不同?跟著小編一起來看一看吧!

ca和cap有什么不同(什么是CAS怎樣工作的)

ca和cap有什么不同

在計算機科學中,比較和交換(Conmpare And Swap)是用于實現多線程同步的原子指令。 它將內存位置的內容與給定值進行比較,只有在相同的情況下,將該內存位置的內容修改為新的給定值。 這是作為單個原子操作完成的。 原子性保證新值基于最新信息計算; 如果該值在同一時間被另一個線程更新,則寫入將失敗。 操作結果必須說明是否進行替換; 這可以通過一個簡單的布爾響應(這個變體通常稱為比較和設置),或通過返回從內存位置讀取的值來完成(摘自維基本科)

CAS可以有效的提升并發的效率,但同時也會引入ABA問題。

CAS其實就是實現一種樂觀的自旋鎖,相較于synchronize的悲觀鎖,沒有阻塞狀態,自然也就沒有上下文的切換了,而線程狀態的切換,耗時比CAS的自旋比較操作耗時大得多。

原子性是什么?原子性就是最小單位,原子性操作就是最小的操作,無法再進一步分割,這操作的結果只有2種,完成或者未完成。例如 int a = 1,這種就是原子性操作。而a ,這個就不是原子性操作,因為a ,會拆解為3步,讀取a的值,a增加1,再把a的值刷新。

還是那個例子,2個線程,同時對一個變量a進行遞增,每次 1,遞增100次。當2個線程都執行完畢,a的結果不會是200,會小于200。

解決辦法?第一時間就會想到加個鎖,因為鎖能保證一段代碼塊執行完畢,從而保證原子性。但是,如果要執行的代碼足夠簡單的時候,例如上面的只有個a ,使用鎖的話,會十分浪費,性能也不高,因為一個線程獲得了鎖,其他線程都無法進行了。所以,就需要用到了CAS

怎樣工作的:初始AtomicInteger的值為0線程A執行:var5 = this.getIntVolatile(var1,var2);獲取的結果為:0線程A被暫停線程B執行:var5 = this.getIntVolatile(var1,var2);獲取的結果為:0線程B執行:this.compareAndSwapInt(var1,var2,var5,var5 var4)線程B成功將AtomicInteger中的值改為1線程A恢復運行,執行:this.compareAndSwapInt(var1,var2,var5,var5 var4),此時線程A使用var1和var2從AtomicInteger中獲取的值為:1,而傳入的var5為0,比較失敗,返回false,繼續循環。線程A執行:var5 = this.getIntVolatile(var1,var2);獲取的結果為:1線程A執行:this.compareAndSwapInt(var1,var2,var5,var5 var4),此時線程A使用var1和var2從AtomicInteger中獲取的值為:1,而傳入的var5為1,比較成功,將其修改為var5 var4,也就是2,將AtomicInteger中的值改為2,結束。

Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖