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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

并发编程(三)原子操作CAS

發布時間:2025/4/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并发编程(三)原子操作CAS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.CAS(Compare And Swap)原子操作:

假定有兩個操作A和B,如果從執行A的線程來看,當另一個線程執行B時,要么將B全部執行完,要么完全不執行B,那么A和B對彼此來說是原子的。

通過鎖,鎖機制可以實現原子操作,但鎖一般是阻塞的如synchronize關鍵字就是基于阻塞的鎖機制,當一個線程擁有鎖時,訪問同一資源的其他線程就需要等待,直到該線程釋放鎖。

但鎖操作有著諸多的問題,如被阻塞的線程有限度比較高;獲取鎖的線程出現不釋放情況;大量線程競爭鎖,CPU會花費大量的時間和資源進行處理,此外鎖機制是一種比較粗粒度的機制,對于像計數器這樣的需求顯得過于笨重。

實現原子操作還可以通過現代處理器基本都支持的CAS()指令來完成。每一個CAS操作過程都包含三個運算符:一個內存地址V,一個期望的值A和一個新值B,操作的時候如果這個地址上存放的值等于這個期望的值A,則將地址上的值賦為新值B,否則不做任何操作

CAS的基本思路就是,如果這個地址上的值和期望的值相等,則給其賦予新值,否則不做任何事兒,但是要返回原值是多少。循環CAS就是在一個循環里不斷的做cas操作,直到成功為止。

2.CAS實現原子操作的三大問題

2.1 ABA問題

因為CAS需要在操作值的時候,檢查值有沒有發生變化,如果沒有發生變化則更新,但是如果一個值原來是A,變成了B,又變成了A,那么使用CAS進行檢查時會發現它的值沒有發生變化,但是實際上卻變化了。

ABA問題的解決思路就是使用版本號。在變量前面追加上版本號,每次變量更新的時候把版本號加1,那么A→B→A就會變成1A→2B→3A。

2.2 循環時間長開銷大

自旋CAS如果長時間不成功,就會給CPU帶來很大的執行開銷。

2.3 只能保證一個共享變量的原子操作

當對一個共享變量執行操作時,我們可以使用循環CAS的方式來保證原子操作,但是對多個共享變量操作時,循環CAS就無法保證操作的原子性,這個時候就可以用鎖。

還有一個取巧的辦法,就是把多個共享變量合并成一個共享變量來操作。比如,有兩個共享變量i=2,j=a,合并一下ij=2a,然后用CAS來操作ij。從Java 1.5開始,JDK提供了AtomicReference類來保證引用對象之間的原子性,就可以把多個變量放在一個對象里來進行CAS操作。

3.原子操作類的使用

AtomicInteger? 原子更新基本類型

compareAndSet():先判斷當前值(舊值)與期望值(expect)是否相等,如果相等 將新值(update)設置為當前值(覆蓋了舊值),

/*** Atomically sets the value to the given updated value* if the current value {@code ==} the expected value.** @param expect the expected value* @param update the new value* @return {@code true} if successful. False return indicates that* the actual value was not equal to the expected value.*/public final boolean compareAndSet(int expect, int update) {return unsafe.compareAndSwapInt(this, valueOffset, expect, update);}


/**
* Gets the current value.
*
* @return the current value
*/
public final int get() {
return value;
} incrementAndGet() (類比于) --> ++i getAndIncrement() (類比于)--> i++

AtomicIntegerArray 原子更新數組里的整形

原子更新引用類型:

AtomicReference

AtomicStampedReference 利用版本戳的形式記錄每次改變后的版本號,解決ABA問題, pair使用?int stamp作為計數器使用

AtomicMarkableReference 原子更新帶有標記為的引用類型 pair使用boolean mark.關注是否被動過。

?

參考:http://enjoy.ke.qq.com

轉載于:https://www.cnblogs.com/cangshublogs/p/10763844.html

總結

以上是生活随笔為你收集整理的并发编程(三)原子操作CAS的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久午夜精品人妻一区二区三区 | 日本乱子伦 | 国产一区二区三区免费在线观看 | 豆花视频成人 | 欧美日韩偷拍视频 | 欧美二区三区 | 国产在线精品自拍 | 欧美日韩高清免费 | 欧美精品在线播放 | 久久美女视频 | 免费观看亚洲视频 | 成人免费视频网站在线观看 | 99色在线观看 | 福利小视频在线 | 日韩网站在线观看 | 成人黄色在线看 | 禁漫天堂黄漫画无遮挡观看 | 在线观看的毛片 | 美女18毛片 | 中文字幕一区二区三区久久久 | 欧美性一区二区三区 | 欧美乱大交 | 国产高潮视频在线观看 | 国产精品久久久久久婷婷天堂 | 欧美一区二区三区婷婷 | 国产在线视频在线观看 | 欧美黄色免费 | 91亚洲国产成人久久精品麻豆 | 亚洲www视频| 免费av资源 | 无码不卡av东京热毛片 | 瑟瑟综合网 | 91久久一区 | 黄色小视频免费在线观看 | 一区二区三区国产在线观看 | 亚洲网站在线看 | 国产三级成人 | 黄色在线观看网站 | 91一区二区三区在线观看 | www黄色网| 午夜激情免费视频 | 久久久久久中文 | 黄色国产一区二区 | 老司机一区 | 欧美三级又粗又硬 | 美女高潮黄又色高清视频免费 | 精品色综合 | 日韩少妇裸体做爰视频 | 亚洲在线免费视频 | 男女羞羞动态图 | 污的视频在线观看 | 日本欧美在线 | 久久中文字 | a级片在线视频 | 亚洲精品国产成人久久av盗摄 | 国产精品手机在线观看 | 91视频麻豆| 日韩有色| 国产美女主播在线 | 伊人影院av | 国产无遮挡一区二区三区毛片日本 | 黄色片91 | 美女视频一区二区 | 欧美激情免费观看 | www.日本com| 日韩精品久久久久久久的张开腿让 | 日本午夜电影 | 美女被男人插 | 亚洲乱码一区二区三区 | 一级中国毛片 | 国产香蕉9| 久久久久久久久久久久久久免费看 | 亚色影库 | 久久精品小视频 | 狂野少女电影在线观看国语版免费 | 欧美激情一区二区三区在线 | 久久国产福利一区 | 日韩国产片 | 人人插人人澡 | 午夜久久久久久久久久 | 伊人婷婷色 | 久久99精品久久久久久园产越南 | 激情黄色小说视频 | 国产三级国产精品国产国在线观看 | 天天色小说 | 国精产品一区一区三区mba下载 | 色综合久久久久久 | 风流老熟女一区二区三区 | 亚洲国产精品视频一区 | 一级艳片新婚之夜 | 五月天欧美 | 狠狠躁日日躁夜夜躁2022麻豆 | 亚洲欧美视频一区二区 | 欧美在线中文字幕 | 15—16女人毛片 | 美女考逼 | 国产精品美女av | 中文字幕一二三四区 | 久久激情综合网 |