java - Cas操作会加锁吗
怪我咯
怪我咯 2017-04-18 10:52:40
0
1
700

问题:
(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。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!