优先级继承
当一个任务阻塞了若干个任务时,若阻塞任务有高优先级任务,则将所有阻塞任务中的最高优先级作为其优先级
优先级天花板
给每个信号量设置一个优先级天花板,优先级天花板的值大于所有使用该信号的任务的优先级,当某个任务得到该信号量时,将其优先级置为优先级天花板的值。
小结
优先级继承和优先级天花板,目的都是使得到信号量的任务的优先级,不低于其他在等待该信号量的任务的优先级,由此,当该任务释放资源后,任务结束前,也不会被其他较高优先级任务抢占,也就保障了如果有高优先级任务在等待该资源,那么该任务结束后高优先级任务立即就可使用该资源。
优先级反转
假设有任务A,B,C,优先级:A > B > C,任务A,B,C都在等待各自的事件触发,并且A C运行中需要同一个临界资源。
首先,C的事件到来了,C开始运行,C得到了临界资源的信号量,此时,A等待的事件到来。
由于A的优先级更高,于是抢占了CPU的使用权,但是由于得不到临界资源的信号量,进入挂起状态,等待资源释放后唤醒。接着C继续得到CPU使用权。
在C释放信号量之前,B等待的事件到来了,B的优先级高于C,抢占CPU使用权,待B任务完成后,释放CPU,C继续运行,直到C释放信号量以后,A才得以被唤醒继续运行。
在这个过程中,A任务的优先级实际降到了和C相同的层次,究其原因,便是C得到了信号量后被不需要该信号量但是优先级更高的任务B抢占,故而使用优先级继承和优先级天花板,就是为了保障高优先级任务真正做到”高优先级“。