
作者:天津九安特機電工程有限公司 來(lái)源: 天津九安特機電工程有限公司 日期:2026-05-04 15:18:19
CAS(Compare and 層原Swap)是一種無(wú)鎖并發(fā)控制算法,它的層原核心思想是通過(guò)比較并交換內(nei)存中的值來(lái)實(shí)現線(xiàn)程之間的同步,CAS操作包含三個(gè)參數:內存位置V、層原期望值A和新值B,層原當內存位置V的層原值與??期望值A相等時(shí),將內存位置V的層(′;ω;`)原值更新為新值B,否則不做任何操作,層原整個(gè)過(guò)程是層原原子性的。??
(圖片來(lái)源網(wǎng)絡(luò ),層原侵刪)Java中的層原CAS操作主要通過(guò)java??.util.concurrent.atoヽ(′▽?zhuān)?ノmic包中的原子類(lèi)實(shí)現,??如AtomicInteger、層原AtomicLong等,層原??這些原子類(lèi)提供了一種在多線(xiàn)程環(huán)境下安全地執行CAS操作的層原方法,從而避免了使用傳統的層原鎖機制。
下面我們來(lái)詳細分析Java CAS的┐(′д`)┌層原底層原理。
1、內存模型和緩存一致性
在多核處理器架構下,為了提高性能,每(mei)個(gè)處理器都有自己的緩存,這就導致了一個(gè)問(wèn)題:當多個(gè)處理器同時(shí)訪(fǎng)問(wèn)同一個(gè)內存地址時(shí),由(you)于緩存的存在,它們可能看到的是不同的值,為了解決這個(gè)問(wèn)題,需要保證緩存一致性。
緩存一致性是指當一個(gè)處理器對某個(gè)內存地址進(jìn)行寫(xiě)操作時(shí),其他處理器對該地址的讀操作都能獲取到最新的值,現代處理器通常采用MESI協(xié)議(Modify、Exclusive、Shared、Inv??ali(′_`)d)來(lái)保證緩存一致性。
2、CAS操作的實(shí)現
CAS操作的實(shí)現依賴(lài)于處理器提供的原子指令,如x86架構下的cmpx(⊙_⊙)chg指(zhi)令,這個(gè)指令可以在一個(gè)原子操作中完成比較并交換操作,具體來(lái)說(shuō),cmpxchg指令有3個(gè)參數:內存地址、期望值和新值,當內存地址的值與期望??值相等時(shí),將內存地址的值更新為新值,否則不做任(ren)何操作,整個(gè)過(guò)程是原子性的(de)。
Java中的CAS操作通過(guò)調用sun.misc.Unsafe類(lèi)中的compareAndSwap方法實(shí)現,這個(gè)方法內部調用了Unsafe類(lèi)的ensureObject方法,該方法會(huì )檢查對象是否被標記為“unsafe”,如果是,則直接調(diao)用本地方法UNSAFE_compareAndSwapObject;如果不是,則先調用markUnsafe方(fang)法將對象標記為“unsafe”,然后再調用UNSAFE_compareAndSwapObject方法。
UNSAFE_compareAndSwapObject方法是?一個(gè)本地方法,它(ta)的實(shí)現依賴(lài)于底層處理器的原子指令,在x86架構下,這個(gè)方(fang)法會(huì )調用cmpxchg指令來(lái)完成CAS操作。
3、CAS操作的優(yōu)點(diǎn)和局限性
CAS操作的優(yōu)點(diǎn)是避免(′?_?`)了鎖機制帶來(lái)的性能開(kāi)銷(xiāo),提高??了并發(fā)性能,CA??S操作具有無(wú)阻塞性,即當CAS操作失敗時(shí),不會(huì )像鎖那樣阻塞線(xiàn)程,而是直接返回失敗結果,這樣可以避免線(xiàn)程之間的競爭,降低線(xiàn)程切換的開(kāi)銷(xiāo)。
CAS操作也存在一些局限性,CAS操作只能保證單個(gè)共享變量的原子性,對于多個(gè)共享變量的操作,無(wú)法保證整體的原子性,CAS操作可能導致??ABA問(wèn)題,即(′?ω?`)當一個(gè)線(xiàn)程在執行CAS操作時(shí),另一個(gè)線(xiàn)程已經(jīng)修改了共享變量的值,然后又將其改回原來(lái)的值,這時(shí)CAS操作會(huì )誤認為共享變量的值沒(méi)有被修改過(guò),從而導致錯誤的結果,為了解決ABA問(wèn)題,可以使用帶有版本號的原子類(lèi),如AtomicStampedReference。
Jav(′▽?zhuān)?)a CAS的底層原理主要依賴(lài)于處理器提供的原子指令,通過(guò)java.util.concurrent.atomic包中的原子類(lèi)實(shí)現,CAS操( ?▽?)作具有高性能和無(wú)??阻塞性的優(yōu)點(diǎn),但也(°ロ°) !存在一些局限性,需要根(gen)據實(shí)際場(chǎng)景選擇合適的同步機制。