如果我在中断上下文中使用信号量和互斥锁会发生什么?通常在同步机制中使用信号量。如果我在中断上下文中使用这个会发生什么?
我正在做一个关于gpio引脚的项目,当中断发生时,我必须在ISR中发送一个信号。我正在使用自旋锁。
如果我在ISR中使用信号量和互斥文本会发生什么?
通过将当前任务状态切换到TASK_INTERRUPTIBLE
/TASK_UNINTERRUPTIBLE
并进一步调用schedule()
来实现互斥锁和信号量的等待。
调用当前任务状态与TASK_RUNNING
不同的schedule()
会导致切换到另一个进程。如果current
是指中断上下文,你将永远不会返回到它,因为调度只能切换到进程。
所以,当你在中断上下文中锁定竞争的(即当前锁定的)信号量/互斥量时,你只是失去了当前执行的"线程"。
如果你锁定了未争用的(当前未锁定)信号量/互斥量,执行将会正确,除非系统日志中警告信号量/互斥量使用不当