在linux下,假如乙個執行緒由於持有暫時無法lock的mutex而休眠,這個執行緒何時會被重新排程?

時間 2021-05-30 03:13:58

1樓:

mutex並不一定自帶喚醒機制。

不過linux核心的mutex在無法得到鎖的時候,會把自己加入乙個waiter佇列後進入等待狀態。unlock的時候,解鎖後會從這個waiter佇列中取乙個加入到排程器的就緒佇列。但需要注意的是,即使這個任務加入到排程器後被立刻喚醒,也不意味著它就一定能得到這個鎖,因為此時已經處於解鎖狀態,大家公平的搶而已。

所以,本質上mutex並不保證在A執行緒解鎖後,立刻就有正在等待這個鎖的執行緒被喚醒去搶這個鎖——這個喚醒過程是任務排程器的問題。

而喚醒了之後能不能真的搶到鎖,也是不確定的——哪怕是在單核的系統上也是如此(你不能保證你是第乙個被喚醒的)。

最後,正常的生產者消費者模型,要避免無謂的重複競爭,難道不應該用semaphore(訊號燈)嗎?

2樓:Zeltar

文件中有介紹mutex,在無法直接獲取到鎖,並且短暫spin後也無法獲取的時候,就會加入queue,直到在unlock中被喚醒(實際的執行要等scheduler)

semaphore在down的時候會呼叫到schedule(),什麼時候再回來完全不確定。workload大可能很久以後才會喚醒。

kernel裡做condition,需要用wait queue,kernel會負責幫你喚醒。

假如乙個劍術高手,在一間屋子用劍偷襲赤手空拳的一群普通人,一瞬間能否殺死幾個人?

沒名 答案是可以的,換作宮本武藏100個都不是問題。不過題主下次問題表述要小心點,知乎這種地方任何表述不清或誇張都會有大佬來認真分析的,浪費他們的時間是很不好的 朱慈桐 能讓他們逃不出去是肯定的。一把好刀,乙個高手,對付一屋子不穿盔甲赤手空拳的拳擊高手也是綽綽有餘。二者都是控制距離的好手,你擁有一把...

假如乙個廣告令人反感,它還算乙個成功的廣告嗎?

算,廣告的意義在於讓你記住它的品牌,而不是讓你喜歡它的廣告。前些年恆源祥每年過年時的廣告,整個廣告就是不停地念 羊羊羊,恆源祥。羊羊羊,恆源祥 大家很討厭這種廣告,但是厭惡也是一種記住。那麼它的目的就達到了。就像這樣,大家記住他很令人震驚,然後經常地令人震驚。那麼它其實比一些普普通通的廣告更容易被記...

假如乙個口吃和乙個說話正常的人互換身體,他們是都能正常說話呢還是都口吃呢?

愛修園 有一部80後都看過的電影叫古惑仔。上面女主角小結巴,一次失憶後以前嚴重的結巴奇蹟般的好了。但當她恢復記憶她說話又開始結巴起來。這雖然是一部電影,但是現實中也是如此,我們的思維控制我們的身體行為和語言。假如你口吃,你換乙個正常人的身體,你還是會口吃。因為在你的思維裡儲存有你口吃的情緒記憶和思維...