cas是什麼?
compare and swap,比較and交換。
為什麼會有cas呢?
synchronize,是悲觀鎖。多少耗費一點效能。悲觀鎖是"總有刁民想害朕",
先持有鎖,然後再去執行後面的邏輯。如果邏輯賊耗時的話,會產生死鎖。
樂觀鎖是先去執行,然後去判斷。
cas就是樂觀鎖。
底層實現:
利用了現代處理器都支援cas命令。迴圈這個指令只到成功為止。
什麼是aba問題呢?
就是乙個執行緒去執行,a->b->a,其實是更換了,但是結果還是a,顯示沒有更換。
怎麼去解決呢?
就是加版本號,a1->b->a2。
那在jdk中有什麼類可以去解決這個問題呢?
atomicmarkablereference和atomicstampedreference
區別在於atomicmarkablereference關注是否有替換。
atomicstampedreference關注替換了幾次。
原子操作 CAS
原子操作 cas 利用現代處理器都支援cas指令,迴圈執行cas指令,直至成功。指令級別的保證原子操作。記憶體位址 v 期望值 a 新值 b 當位址v上的值等於a時,就把b賦值給v,若不等於,就不做任何操作,或一直迴圈。1 aba問題 記憶體位址上的值變化 a b a 可以加版本號解決。則值的變化就...
原子操作CAS
原子操作cas cas是一種樂觀鎖思想的應用 cas的原理 cas compare and swap 指令級別保證這是乙個原子操作 三個運算子 乙個記憶體位址v,乙個期望的值a,乙個新值b 基本思路 如果位址v上的值和期望的值a相等,就給位址v賦給新值b,如果不是,不做任何操作。cas問題 1 ab...
CAS原子操作
原子操作 什麼是原子操作,打個比方,假如有兩個操作a和b,當執行a的執行緒去看另乙個執行b的執行緒的時候,要麼b執行緒還沒執行,要麼b執行緒執行完了。那麼a跟b之間就是原子的。如何實現原子操作 實現原子操作的方式,當然有加鎖,比如synchronized加鎖機制可以很好的保證原子操作,但是過於笨重。...