文章詳情頁
java - Cas操作會加鎖嗎
瀏覽:129日期:2024-01-12 09:39:59
問題描述
問題:(1)不需要cas操作來加鎖和解鎖,這個怎么理解??cas操作不是如果比較不成功那么就一直嘗試嗎?和加鎖有什么關系??這個該如何理解
問題解答
回答1: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。
標簽:
java
相關文章:
1. javascript - 如何將一個div始終固定在某個位置;無論屏幕和分辨率怎么變化;div位置始終不變2. html - vue項目中用到了elementUI問題3. javascript - 原生canvas中如何獲取到觸摸事件的canvas內坐標?4. javascript - vscode alt+shift+f 格式化js代碼,通不過eslint的代碼風格檢查怎么辦。。。5. javascript - 求解答:實例對象調用constructor,此時constructor內的this的指向?6. javascript - 有什么比較好的網頁版shell前端組件?7. java - 如何寫一個intellij-idea插件,實現編譯時修改源代碼的目的8. javascript - [js]為什么畫布里不出現圖片呢?在線等9. java 中Long 類型如何轉換成Double?10. html5 - 有可以一次性把所有 css外部樣式轉為html標簽內style=" "的方法嗎?
排行榜
