在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java  Linux  網(wǎng)絡(luò)安全/ 另一個(gè)線(xiàn)程是怎么知道互斥量被釋放的呢?

另一個(gè)線(xiàn)程是怎么知道互斥量被釋放的呢?

自旋鎖很好理解,就是不斷地輪詢(xún),那么互斥鎖是通過(guò)什么樣的機(jī)制呢?這樣的機(jī)制有什么弊端導(dǎo)致在一些場(chǎng)合用自旋鎖更好呢?

回答
編輯回答
尛曖昧

并不是線(xiàn)程“知道”,而是等待時(shí)會(huì)進(jìn)入阻塞狀態(tài),擁有鎖的線(xiàn)程在釋放鎖時(shí)需要通知等待線(xiàn)程,這樣等待線(xiàn)程才能被喚醒。

至于自旋鎖,其優(yōu)點(diǎn)是無(wú)需進(jìn)入阻塞狀態(tài),因此節(jié)省了阻塞和喚醒的切換開(kāi)銷(xiāo)。但缺點(diǎn)是會(huì)一直占用CPU,如果長(zhǎng)時(shí)間無(wú)法獲取到鎖,反而會(huì)增加開(kāi)銷(xiāo),降低性能。

2017年11月22日 10:15
編輯回答
扯不斷

補(bǔ)充一下樓上,線(xiàn)程切換的開(kāi)銷(xiāo)大于短時(shí)間輪詢(xún)的開(kāi)銷(xiāo),如果需要在臨界區(qū)外等待的時(shí)間很短,則使用輪詢(xún)以降低開(kāi)銷(xiāo),而在這種情況下使用普通的互斥鎖會(huì)導(dǎo)致頻繁的線(xiàn)程切換;若需要在臨界區(qū)外等待的時(shí)間比較長(zhǎng),則使用普通的互斥鎖會(huì)比輪詢(xún)的開(kāi)銷(xiāo)小,線(xiàn)程無(wú)需“忙等待”而去“睡覺(jué)”即可,等待有人出了臨界區(qū),睡覺(jué)的線(xiàn)程就會(huì)被叫醒。更多內(nèi)容參考《操作系統(tǒng)》,盡量看英文原版,中文版翻譯非常劣質(zhì),poorly translated

2017年4月21日 19:08