在RTOS中,互斥锁(Mutex)通常支持优先级继承,以缓解优先级翻转。但若在中断服务程序(ISR)中释放互斥锁,会引发隐蔽死锁。原因在于:中断上下文不属于任何任务,无法参与优先级继承机制。当低优先级任务持有互斥锁,高优先级任务等待该锁时,若中断释放该锁,系统无法将持有者的优先级提升到等待者级别,导致高优先级任务可能被无限期阻塞。更严重的是,若中断释放锁后,低优先级任务因调度延迟未立即运行,而高优先级任务在中断返回后仍等待,可能造成死锁。实操建议:严禁在ISR中释放互斥锁,应使用信号量或事件标志组代替,并通过任务通知或队列将释放操作延迟到任务上下文执行。若必须使用互斥锁,可考虑在ISR中仅发送事件,由专门任务负责释放。
mcuku 阿沐 · 2026-08-27