文章詳情頁
java - Cas操作會加鎖嗎
瀏覽:108日期: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. 請教一個python字符串處理的問題?2. HTML5禁止img預覽該怎么解決?3. javascript - 手機點擊input時,button會被頂上去?求解決!??!4. 網頁爬蟲 - python爬蟲用BeautifulSoup爬取<s>元素并寫入字典,但某些div下沒有這一元素,導致自動寫入下一條,如何解決?5. html - 請教一個前端css問題。6. 百度地圖api - Android 百度地圖 集成了定位,導航 相互的jar包有沖突?7. javascript - vscode alt+shift+f 格式化js代碼,通不過eslint的代碼風格檢查怎么辦。。。8. javascript - vue-mint UI - icon在哪里有文檔?9. html5 - 表單無法屏蔽自動填充 autocomplete=off10. python - django 按日歸檔統計訂單求解
排行榜
