java - Cas操作會(huì)加鎖嗎
問題描述

問題:(1)不需要cas操作來加鎖和解鎖,這個(gè)怎么理解??cas操作不是如果比較不成功那么就一直嘗試嗎?和加鎖有什么關(guān)系??這個(gè)該如何理解
問題解答
回答1:compare and swap操作不一定不需要鎖,看平臺(tái),但是大多數(shù)平臺(tái)都是支持無鎖cas的。最簡(jiǎn)單的鎖是通過test and set實(shí)現(xiàn)的自旋鎖,當(dāng)然通過cas也可以實(shí)現(xiàn)。
自旋鎖在上鎖失敗時(shí)的確會(huì)不斷嘗試,耗盡cpu資源。如
while (flag.test_and_set()) { /* yield; */ } // 上鎖flag.clear(); // 解鎖
系統(tǒng)接口提供的鎖,上鎖失敗時(shí)一般會(huì)掛起線程,類似
while (flag.test_and_set()) { flag.wait_for_unlock_signal(); } // 上鎖
這里的wait_for_unlock_signal()是個(gè)假想函數(shù)。但是上鎖依然依賴類似cas的原子操作。也就是說,現(xiàn)在鎖都是通過一些基本的原子操作來實(shí)現(xiàn)的,如test and set和compare and swap。
相關(guān)文章:
1. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””2. docker鏡像push報(bào)錯(cuò)3. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問題4. 利用IPMI遠(yuǎn)程安裝centos報(bào)錯(cuò)!5. node.js - mongodb查找子對(duì)象的名稱為某個(gè)值的對(duì)象的方法6. html5和Flash對(duì)抗是什么情況?7. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????8. phpstudy8.1沒集成mysql-front9. javascript - 在 model里定義的 引用表模型時(shí),model為undefined。10. 運(yùn)行python程序時(shí)出現(xiàn)“應(yīng)用程序發(fā)生異?!钡膬?nèi)存錯(cuò)誤?

網(wǎng)公網(wǎng)安備