在嵌入式多任务系统中,有些资源必须是独占使用的,多个任务对这样的资源的并发访问将导致错误的发生。一般来说,对需要独占使用的资源必须使用互斥方法将对其的并发访问串行化。
在优先级多任务系统中引入互斥方案,会导致任务优先级反转的问题:假如某时低优先级的任务占有资源,然后又有高优先级的任务申请资源,但因为不能满足而被挂起了,即低优先级任务阻塞了高优先级任务的运行。
假如这时又有一个中优先级任务,那么它会把低优先级任务抢占。最终高优先级任务会间接地被中优先级任务抢占了。这种现象叫作优先级反转。举例说明:
假如A、C、D三个任务优先级从高到低排列,任务A和C共享互斥信号量R,如果某一时刻任务C已经获得互斥信号量R,而任务A此时尝试占用R,那么任务A会因为得不到R而阻塞在R的任务等待队列中。再假设此时任务D因为优先级高于任务C从而抢占了C,进而长期占有处理器资源,那么就相当于低优先级的任务D间接阻塞了高优先级任务A的运行。
- T0时刻,任务C处于运行状态,运行过程中,任务C获得了共享资源R;
- T1时刻,任务A就绪,由于任务A优先级高于任务C,所以它抢占了任务C,任务A被调度执行;
- T2时刻,任务A需要共享资源R,但R被更低优先级的任务C所拥有,所以任务A被阻塞等待该资源,任务C得到执行;
- T3时刻,此时任务D就绪,由于任务D优先级高于任务C&#