Использование спин-блокировки и семафора в Linux в контексте процесса и прерывания

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

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

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

1 ответ

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

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

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

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

Другие вопросы по тегам