0

如果我在中斷上下文中使用信號量和互斥鎖,會發生什麼? 通常信號量用於同步機制。如果我在中斷環境中使用這個,會發生什麼?在進程和中斷環境下在linux中使用自旋鎖和信號量

我正在研究一個關於gpio引腳的項目,當中斷髮生時,我必須在ISR中發送一個信號。我正在使用自旋鎖。

如果我在ISR中使用信號量和mutext會發生什麼?

回答

1

等待互斥鎖和信號燈使用切換當前任務狀態到TASK_INTERRUPTIBLE/TASK_UNINTERRUPTIBLE和類似的進一步調用schedule()

調用schedule()與當前任務狀態不同從TASK_RUNNING導致切換到另一個進程。如果current涉及中斷上下文,您將永遠不會再回到它,因爲調度只能切換到進程

所以,當你鎖定爭用(也就是當前鎖定的)信號量/互斥體在中斷上下文中,你剛剛失去了當前執行的「線程」。

如果您鎖定無競爭(當前未鎖定)的信號量/互斥量,則除系統日誌中關於不正確的信號量/互斥量使用情況的警告外,執行將正確。

+1

「current」在任何時候都不會爲空。因此,在中斷環境中休眠將使用當前任務的線程信息來存儲可以調度的信息。所以根本原因可能不是它。我對嗎? – Arthur

+0

@Arthur看起來像是正確答案http://www.quora.com/Why-cant-you-sleep-in-an-interrupt-handler-in-the-Linux-kernel-Is-this-true-of-所有-OS的內核 –

相關問題