CAS與AQS

一、CAS和AQS的區別

CAS(Compare and Swap),中文為比較並交換,是一種實現並發演算法的原語。而AQS(AbstractQueuedSynchronizer)是一種基於CAS的同步工具,通過將共享資源封裝在AQS上,避免了用戶直接使用CAS的複雜性。因此,CAS與AQS的主要區別就在於是否封裝了共享資源。

CAS面向的是共享變數的原子性操作,而AQS面向的是獨佔鎖和共享鎖。通過AQS的實現,可以方便地對鎖進行控制,實現線程的同步和互斥訪問。

二、CAS和AQS的原理

CAS通過比較內存中的值和期望值是否相等來判斷是否執行操作,如果相等則交換,否則不做任何處理。這樣可以確保在多線程並發執行的情況下,只有一個線程能夠成功地修改值。

AQS則是基於CAS的演算法來實現同步和互斥。AQS維護一個雙向鏈表,其中節點代表線程,表示線程持有鎖或在等待中。通過對節點的操作來實現鎖的分配和釋放的控制。

三、CAS和AQS的實現

CAS的實現需要藉助特殊的CPU指令,如x86架構中的CMPXCHG指令,來實現原子性操作。下面是一個Java中CAS操作的簡單示例:

private static final AtomicLong counter = new AtomicLong(); // 原子操作的計數器

public void add() {
    long oldValue = counter.get();
    while (!counter.compareAndSet(oldValue, oldValue + 1)) {
        oldValue = counter.get();
    }
}

AQS的實現則是通過繼承AbstractQueuedSynchronizer類來實現。需要實現tryAcquire、tryRelease、tryAcquireShared和tryReleaseShared等方法來控制線程的協同工作。

四、CAS和CAG的關係

CAS和CAG(Compare and Get)是兩種類似的原語,都是實現並發演算法的重要手段。CAG也可以實現類似CAS的功能,但是CAG比CAS要弱一些,主要是因為CAG無法保證原子性。

通常情況下,CAG主要用於實現樂觀鎖。使用CAG的過程中,會先讀取變數的值,然後進行操作,最後再將操作後的值與當前的值進行比較。如果相等,則說明操作無法執行,需要重新嘗試。

五、CASS和CAST的區別

CASS(Compare and Set Select)和CAST(Compare and Swap Tuple)是CAS的不同實現方式。CASS是基於標識符選擇,而CAST是基於元組選擇。

比如,在Java中,AtomicStampedReference就是一種基於CASS實現的原語,它可以在比較值的同時,還可以比較版本號。

六、CASS和CAST的工藝區別

CASS和CAST的工藝區別主要體現在硬體的實現方式上。CASS主要運用於軟體領域,而CAST主要運用於CPU硬體設計,需要支持CAS指令。

七、CASC和CNSA

CASC(Computer Architecture Standards Committee)是一種基於CAS原語的標準框架,用於實現並發控制的演算法。CNSA(Chinese National Standard Algorithm)是中國國家標準演算法,也是一種基於CAS的演算法。

兩者在原理上類似,都是基於CAS實現的同步演算法。不同的是,CNSA是中國獨有的演算法,而CASC更加通用,可以適用於不同的領域。

八、CASH和Revenue

CASH(Compare And Swap Hard)和Revenue是兩種基於CAS的並發控制演算法。CASH是基於硬體實現的演算法,而Revenue是基於軟體實現的演算法。

CASH主要依賴處理器的CAS指令來實現原子操作,速度相對較快。而Revenue則需要自行維護並發控制機制,這樣會導致在高並發場景下的性能下降。

九、AQS演算法

AQS演算法是一種基於鎖的同步機制,具有良好的擴展性和靈活性。通過維護一個雙向鏈表,可以實現鎖的分配和釋放的控制。

AQS中的鎖主要分為獨佔鎖和共享鎖。獨佔鎖可以被一個線程持有,其他線程需要等待該線程釋放;而共享鎖則可以被多個線程同時持有,但是不能同時被兩個以上的獨佔鎖持有。

十、CASH和SpotCash

CASH和SpotCash都是基於CAS實現的並發控制演算法。CASH是一種硬體實現的演算法,而SpotCash是一種軟體實現的演算法。

CASH主要依賴CPU的CAS指令來實現原子操作,速度相對較快。而SpotCash則需要自行實現並發控制機制,這樣會導致在高並發場景下的性能下降。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303341.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-31 11:49
下一篇 2024-12-31 11:49

相關推薦

  • CAS單點登錄原理、實現及其應用

    一、CAS單點登錄概述 CAS (Central Authentication Service) 單點登錄是一種開源的企業級單點登錄系統。它通過提供可重用的身份認證服務,使之成為一…

    編程 2025-04-18
  • CAS Server全能指南

    當我們構建一個應用程序時,安全方面的考慮總是很重要的。單點登錄和認證服務是常見的安全需求。而在這種情況下,CAS(中央認證服務)是一個出色的選擇。CAS是一個基於Web的開源身份驗…

    編程 2025-04-12
  • CAS Java:單點登錄的終極解決方案

    一、什麼是CAS Java? CAS(Central Authentication Service)是一個企業級開源單點登錄解決方案,包括多種客戶端和伺服器的實現。它能夠為不同的應…

    編程 2025-01-27
  • Java CAS原理詳解

    一、CAS介紹 CAS(Compare and Swap),即比較-交換操作,是一種原子操作。原子操作是指不可中斷的一個或一系列操作。這個操作被看做是一個整體,不可能被線程調度機制…

    編程 2025-01-03
  • java並發cas之aba問題(java cas aba問題)

    本文目錄一覽: 1、北大青鳥java培訓:Java並發編程常用的類和集合? 2、java 多線程 什麼是aba問題 3、CAS原理以及CAS帶來的三大問題 北大青鳥java培訓:J…

    編程 2025-01-02
  • CAS單點登錄詳解

    一、什麼是CAS單點登錄? CAS單點登錄(Central Authentication Service)是一種Web應用程序的單點登錄協議,其基本流程是在一個Web應用程序中進行…

    編程 2024-12-17
  • CAS自旋鎖詳解

    一、CAS自旋鎖原理 CAS自旋鎖,是一種基於比較並交換演算法實現的鎖。它利用了CPU指令集中的原子性操作,將鎖的狀態存儲在共享內存區域,通過CAS指令對該內存區域進行原子性操作,來…

    編程 2024-12-12
  • CAS服務詳解

    CAS (Central Authentication Service) 是 Yale 大學開發的一個開源的單點登錄協議,通過一個登陸中心 CAS Server,用戶可以用同一個賬…

    編程 2024-12-03
  • C++ CAS——一個全新的C++計算庫

    C++ CAS是一個全新的開源C++計算庫,可以用於各種數學應用,包括科學計算、圖形學和機器學習等。C++ CAS的特點是可以自動求導,並直接返回解析式結果,不需要用戶手動計算,免…

    編程 2024-11-26
  • CAS單點登錄實現原理詳解

    一、CAS單點登錄 CAS(Central Authentication Service)是一款開源的,支持單點登錄(Single Sign-On,SSO)協議的認證系統。它提供了…

    編程 2024-11-21

發表回復

登錄後才能評論