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. boot2docker無法啟動(dòng)3. docker-compose中volumes的問題4. java - SSH框架中寫分頁時(shí)service層中不能注入分頁類5. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.6. nignx - docker內(nèi)nginx 80端口被占用7. dockerfile - 為什么docker容器啟動(dòng)不了?8. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?9. docker容器呢SSH為什么連不通呢?10. 關(guān)于docker下的nginx壓力測(cè)試

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