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

問(wèn)題:(1)不需要cas操作來(lái)加鎖和解鎖,這個(gè)怎么理解??cas操作不是如果比較不成功那么就一直嘗試嗎?和加鎖有什么關(guān)系??這個(gè)該如何理解
問(wèn)題解答
回答1:compare and swap操作不一定不需要鎖,看平臺(tái),但是大多數(shù)平臺(tái)都是支持無(wú)鎖cas的。最簡(jiǎn)單的鎖是通過(guò)test and set實(shí)現(xiàn)的自旋鎖,當(dāng)然通過(guò)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的原子操作。也就是說(shuō),現(xiàn)在鎖都是通過(guò)一些基本的原子操作來(lái)實(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容器呢SSH為什么連不通呢?3. javascript - 連續(xù)點(diǎn)擊觸發(fā)mouseleave事件4. nignx - docker內(nèi)nginx 80端口被占用5. mac里的docker如何命令行開(kāi)啟呢?6. 關(guān)于docker下的nginx壓力測(cè)試7. docker - 各位電腦上有多少個(gè)容器?。咳萜饕欢?,自己都搞混了,咋辦呢?8. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問(wèn)題。9. docker gitlab 如何git clone?10. macos - mac下docker如何設(shè)置代理

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