spinlock和mutex選用方法

lethe1203發表於2024-03-25
資料參考:
《宋寶華 Linux裝置驅動開發詳解》
spinlock和mutex選用方法如下:
1、當鎖不能被獲取到時,使用互斥體的開銷僅僅是上下文切換,使用自旋鎖的開銷是等待獲取自旋鎖(由臨界區的執行時間決定)。若臨界區比較小,適合使用自旋鎖。若臨界區較大,適合使用互斥鎖
2、互斥鎖所保護的臨界區可包含引起阻塞的程式碼,而自旋鎖要絕對避免用來保護有程序排程的臨界區。因為程序排程當程序切換出去之後,另一個程序企圖獲取本自旋鎖,這樣就會導致死鎖
3、互斥體存在於程序上下文,因此,如果被保護的共享資源需要再中斷或軟中斷情況下使用,則只能選擇自旋鎖。當然,如果一定要用互斥體,則只能透過mutex_trylock()方式進行,不能獲取就立即返回以避免阻塞

相關文章