如果我在中断上下文中使用信号量和互斥锁,会发生什么? 通常,信号量用于同步机制。如果我在中断上下文中使用这个会发生什么?
我正在开发一个关于gpio引脚的项目,当中断发生时,我必须在ISR中发送一个信号。我正在使用自旋锁。
如果我在ISR中使用信号量和静音,会发生什么?
答案 0 :(得分:1)
使用切换当前任务状态到TASK_INTERRUPTIBLE
/ TASK_UNINTERRUPTIBLE
来实现互斥和信号量等待,并进一步调用schedule()
。
使用当前任务状态调用schedule()
与TASK_RUNNING
不同会导致切换到另一个进程。如果current
引用中断上下文,您将永远不会返回它,因为调度只能切换到进程。
因此,当您在中断上下文中锁定争用(即当前已锁定)信号量/互斥锁时,您只是丢失了当前执行的“线程”。
如果您锁定无竞争的(当前未锁定)的信号量/互斥锁,则执行将是正确的,但系统日志中警告不正确的信号量/互斥量使用情况。