比較並交換 CAS 原理

2021-08-31 17:04:09 字數 747 閱讀 8734

引用:

比較並交換 (cas)

支援併發的第乙個處理器提供原子的測試並設定操作,通常在單位上執行這項操作。現在的處理器(包括 intel 和 sparc 處理器)使用的最通用的方法是實現名為比較並轉換或 cas 的原語。(在 intel 處理器中,比較並交換通過指令的 cmpxchg 系列實現。powerpc 處理器有一對名為「載入並保留」和「條件儲存」的指令,它們實現相同的目地;mips 與 powerpc 處理器相似,除了第乙個指令稱為「載入鏈結」。)

cas 操作包含三個運算元 —— 記憶體位置(v)、預期原值(a)和新值(b)。如果記憶體位置的值與預期原值相匹配,那麼處理器會自動將該位置值更新為新值。否則,處理器不做任何操作。無論哪種情況,它都會在 cas 指令之前返回該位置的值。(在 cas 的一些特殊情況下將僅返回 cas 是否成功,而不提取當前值。)cas 有效地說明了「我認為位置 v 應該包含值 a;如果包含該值,則將 b 放到這個位置;否則,不要更改該位置,只告訴我這個位置現在的值即可。」

通常將 cas 用於同步的方式是從位址 v 讀取值 a,執行多步計算來獲得新值 b,然後使用 cas 將 v 的值從 a 改為 b。如果 v 處的值尚未同時更改,則 cas 操作成功。

類似於 cas 的指令允許演算法執行讀-修改-寫操作,而無需害怕其他執行緒同時修改變數,因為如果其他執行緒修改變數,那麼 cas 會檢測它(並失敗),演算法可以對該操作重新計算。清單 3 說明了 cas 操作的行為(而不是效能特徵),但是 cas 的價值是它可以在硬體中實現,並且是極輕量級的(在大多數處理器中):

CAS 比較並交換

cas的典型使用模式是 首先執行緒從記憶體v中讀取值a,當且僅當預期值a和記憶體值v相同時,將記憶體值v修改為b,否則返回v。這是一種樂觀鎖的思路,它相信在它修改v之前,沒有其他執行緒會去修改v值 而synchronized是一種悲觀鎖,它認為在它修改v之前,一定會有其它執行緒去修改v,悲觀鎖效率很...

比較並交換CAS

cas包含了3個運算元 需要讀寫的記憶體位置v 進行比較的值a和擬寫入的新值b。當且僅當v的值等於a時,cas才會通過原子方式用新值b來更新v的值,否則不會執行任何操作。無論位置v的值是否等於a,都將返回v原有的值。cas的含義是 我認為v的值應該為a,如果是,那麼將v的值更新為b,否則不修改並告訴...

cas原理介紹

cas用來標誌使用者的token是存在它自己的網域名稱下的,不是存在web應用的網域名稱下的.cas判斷使用者登入由agent決定,agent驗證使用者資訊有兩種處理.1.如果這個使用者是以前沒登入過的,也就是說這個web應用的網域名稱下沒有乙個agent頒發的sessionid 在cookie裡 ...