首頁  >  問答  >  主體

java - Cas操作会加锁吗

问题:
(1)不需要cas操作来加锁和解锁,这个怎么理解??cas操作不是如果比较不成功那么就一直尝试吗?和加锁有什么关系??这个该如何理解

怪我咯怪我咯2743 天前702

全部回覆(1)我來回復

  • 怪我咯

    怪我咯2017-04-18 10:54:40

    compare and swap操作不一定不需要鎖,看平台,但是大多數平台都是支援無鎖cas的。最簡單的鎖是透過test and set實現的自旋鎖,當然透過cas也可以實現。

    自旋鎖在上鎖失敗時的確會不斷嘗試,耗盡cpu資源。如

    while (flag.test_and_set()) { /* yield; */ } // 上锁
    flag.clear(); // 解锁
    

    系統介面提供的鎖,上鎖失敗時一般會掛起線程,類似

    while (flag.test_and_set()) { flag.wait_for_unlock_signal(); } // 上锁
    

    這裡的wait_for_unlock_signal()是個假想函數。但是上鎖依然依賴類似cas的原子操作。也就是說,現在鎖都是透過一些基本的原子操作來實現的,如test and set和compare and swap。

    回覆
    0
  • 取消回覆