0

Что произойдет, если я использую блокировки семафора и блокировки мьютексов в контексте прерывания? Обычно семафор используется в механизме синхронизации. Что произойдет, если я воспользуюсь этим в контексте прерывания?Использование спин-локов и семафора в linux в контексте процесса и interupt

Я работаю над проектом на булавках gpio, и когда прерывание происходит, я должен отправить один сигнал в ISR. Я использую спин-блоки.

Что произойдет, если я использую семафор и mutext в ISR?

ответ

1

Ожидание мьютексов и семафоров осуществляется с использованием текущего состояния задачи переключения до TASK_INTERRUPTIBLE/TASK_UNINTERRUPTIBLE и аналогично с дальнейшим вызовом schedule().

Вызов schedule() с текущим состоянием задачи, отличным от TASK_RUNNING, приводит к переключению на другой процесс. И если current ссылается на контекст прерывания, вы никогда не вернетесь к нему, потому что планирование может переключиться только на процесс .

Итак, если вы заблокировали , то утвердились (то есть, в настоящее время заблокированы) семафор/мьютекс в контексте прерывания, вы просто потеряли текущее исполнение «поток».

Если вы заблокировали семафор/мьютекс, который является неконкретным (в настоящее время не заблокирован), выполнение будет правильным, за исключением предупреждения в системном журнале о неправильном использовании семафора/мьютекса.

+1

«current» не будет NULL в любое время. Таким образом, спать в контексте прерывания будет использовать информацию о потоке текущей задачи для хранения информации, которая может быть запланирована. Таким образом, первопричина может быть не такой. Я прав? – Arthur

+0

@Arthur Это выглядит как правильный ответ http://www.quora.com/Why-cant-you-sleep-in-an-interrupt-handler-in-the-Linux-kernel-Is-this-true-of-of- все-OS-ядро –

Смежные вопросы