linux中自旋锁和信号量在进程和中断上下文中的使用



如果我在中断上下文中使用信号量和互斥锁会发生什么?通常在同步机制中使用信号量。如果我在中断上下文中使用这个会发生什么?

我正在做一个关于gpio引脚的项目,当中断发生时,我必须在ISR中发送一个信号。我正在使用自旋锁。

如果我在ISR中使用信号量和互斥文本会发生什么?

通过将当前任务状态切换到TASK_INTERRUPTIBLE/TASK_UNINTERRUPTIBLE并进一步调用schedule()来实现互斥锁和信号量的等待。

调用当前任务状态与TASK_RUNNING不同的schedule()会导致切换到另一个进程。如果current是指中断上下文,你将永远不会返回到它,因为调度只能切换到进程

所以,当你在中断上下文中锁定竞争的(即当前锁定的)信号量/互斥量时,你只是失去了当前执行的"线程"。

如果你锁定了未争用的(当前未锁定)信号量/互斥量,执行将会正确,除非系统日志中警告信号量/互斥量使用不当

最新更新