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