0

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

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

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

4

1 回答 1

1

互斥体和信号量中的等待是通过将当前任务状态切换到TASK_INTERRUPTIBLE/来实现的TASK_UNINTERRUPTIBLE,与进一步调用schedule().

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

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

如果您锁定了未竞争(当前未锁定)的信号量/互斥锁,则执行将正确,但系统日志中会出现有关信号量/互斥锁使用不当的警告。

于 2015-08-14T17:33:27.340 回答