文章詳情頁
java - Cas操作會加鎖嗎
瀏覽:86日期: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. java - mongodb分片集群下,count和聚合統計問題2. 服務器端 - 采用nginx做web服務器,C++開發應用程序 出現拒絕連接請求?3. javascript - vue 移動端的input 數字輸入優化4. java - 自己制作一個視頻播放器,遇到問題,用的是內置surfaceview類,具體看代碼!5. javascript - 有什么兼容性比較好的辦法來判斷瀏覽器窗口的類型?6. android - java 泛型不支持數組,那么RxJava的Map集合有什么方便的手段可以定義獲得一串共同父類集合數據呢?7. 關于docker下的nginx壓力測試8. python - pandas按照列A和列B分組,將列C求平均數,怎樣才能生成一個列A,B,C的dataframe9. 為什么我ping不通我的docker容器呢???10. java 隨機延遲執行
排行榜
