可能重複:
Why can't you sleep while holding spinlock?爲什麼在持有螺旋鎖時不允許「睡覺」?
據我所知,自旋鎖應該在短時間的使用,並且在代碼中是唯一的選擇,如中斷處理程序在那裏睡覺(搶佔)是不允許。
但是,我不知道爲什麼有這樣一個「規則」,在舉行螺旋鎖時應該沒有睡覺。我知道這不是一個推薦的做法(因爲它在表演中是有害的),但我沒有看到爲什麼睡眠不應該被允許進入自旋鎖。
,而你獲得一種信號你不能讓一個自旋鎖,因爲你可能不得不睡在等待信號,並在持有自旋鎖(從「Linux內核開發」由羅伯特·愛)你無法入睡。
我能看到的唯一原因是爲了便攜性的原因,因爲在單處理器,自旋鎖作爲禁止中斷,並通過禁用中斷來實現,睡眠當然是不允許的(但睡眠不會打破在SMP系統的代碼) 。
但我想知道我的推理是否正確或者是否有其他原因。
你說這個規則是什麼? –
我剛剛在我的問題出現時添加了一個塊引用。 – SHH
這看起來像我特定於Linux內核開發的東西。如果你正在談論Linux內核開發,那麼請相應地標記問題。 –