CAS(compare and swap)
阿新 • • 發佈:2021-08-19
首先什麼是原子操作?
原子本意是“不能被進一步分割的最小粒子”,而原子操作意為”不可被中斷的一個或一系列操作”;
處理器如何實現原子操作?
- 首先處理器會自動保證基本的記憶體操作的原子性:處理器保證從系統記憶體當中讀取或者寫入一個位元組是原子的,意思是當一個處理器讀取一個位元組時,其他處理器不能訪問這個位元組的記憶體地址。
- 匯流排鎖保證原子性:所謂匯流排鎖就是使用處理器提供的一個LOCK#訊號,當一個處理器在總線上輸出此訊號時,其他處理器的請求將被阻塞住,那麼該處理器可以獨佔使用共享記憶體。
- 快取鎖定保證原子性:鎖住匯流排的消耗太大,於是有了快取鎖,在Lock期間處理器快取的記憶體區域會被鎖定,其他處理其無法更改該塊記憶體中的資料
現代的大多數CPU都實現了CAS,它是一種==無鎖==(lock-free),且==非阻塞==的一種演算法,保持資料的一致性
CAS的思想很簡單:三個引數,一個當前記憶體值V、舊的預期值A、即將更新的值B,當且僅當預期值A和記憶體值V相同時,將記憶體值修改為B並返回true,否則什麼都不做,並返回false。
cas步驟還原:
- 需要傳遞三個引數 1.當前執行緒中獲取的舊值 2.新值 3.記憶體地址中的值
- 迴圈比較舊值和記憶體地址中的值,直到比較成功為止,即使失敗,舊值是用volatile修飾的,保證一旦發生改變,能夠被其他執行緒所察覺.然後再進行比較.