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

时间:2015-08-14 15:49:15

标签: linux-kernel synchronization mutex spinlock binary-semaphore

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

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

如果我在ISR中使用信号量和静音,会发生什么?

1 个答案:

答案 0 :(得分:1)

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

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

因此,当您在中断上下文中锁定争用(即当前已锁定)信号量/互斥锁时,您只是丢失了当前执行的“线程”。

如果您锁定无竞争的(当前未锁定)的信号量/互斥锁,则执行将是正确的,但系统日志中警告不正确的信号量/互斥量使用情况。