文章詳情頁
java - Cas操作會加鎖嗎
瀏覽:113日期:2024-01-12 09:39:59
問題描述
問題:(1)不需要cas操作來加鎖和解鎖,這個怎么理解??cas操作不是如果比較不成功那么就一直嘗試嗎?和加鎖有什么關(guān)系??這個該如何理解
問題解答
回答1:compare and swap操作不一定不需要鎖,看平臺,但是大多數(shù)平臺都是支持無鎖cas的。最簡單的鎖是通過test and set實現(xiàn)的自旋鎖,當(dāng)然通過cas也可以實現(xiàn)。
自旋鎖在上鎖失敗時的確會不斷嘗試,耗盡cpu資源。如
while (flag.test_and_set()) { /* yield; */ } // 上鎖flag.clear(); // 解鎖
系統(tǒng)接口提供的鎖,上鎖失敗時一般會掛起線程,類似
while (flag.test_and_set()) { flag.wait_for_unlock_signal(); } // 上鎖
這里的wait_for_unlock_signal()是個假想函數(shù)。但是上鎖依然依賴類似cas的原子操作。也就是說,現(xiàn)在鎖都是通過一些基本的原子操作來實現(xiàn)的,如test and set和compare and swap。
標(biāo)簽:
java
相關(guān)文章:
1. python - 使用xlsxwriter寫入Excel, 只能寫入65536 無法繼續(xù)寫入.2. Python做掃描,發(fā)包速度實在是太慢了,有優(yōu)化的方案嗎?3. objective-c - ios百度地圖定位問題4. java - Web開發(fā) - POI導(dǎo)出帶有下拉框的Excel和解決下拉中數(shù)組過多而產(chǎn)生的異常5. java - 微信退款,公賬號向個人轉(zhuǎn)賬SSL驗證失敗6. java - 安卓接入微信登錄,onCreate不會執(zhí)行7. python - flask如何創(chuàng)建中文列名的數(shù)據(jù)表8. javascript - 關(guān)于定時器 與 防止連續(xù)點擊 問題9. 微信開放平臺 - Android調(diào)用微信分享不顯示10. python - mysql 如何設(shè)置通用型字段? 比如像mongodb那樣
排行榜

熱門標(biāo)簽