线程优先级反转与继承(priority inversion and priority inheritance)
简而言之,优先级反转是线程访问内存资源时出现的一种问题,而优先级继承是其一种解决方法。
下面以一个实例进行说明:
如上图所示:假设我们有一个高优先级的任务和一个低优先级的任务,两个任务都需要访问临界区(critical section),当低优先级任务已经在临界区并上锁,并且需要获得cpu资源,而此时高优先级也需要访问临界区,需要等待低优先级任务退出临界区。
如果高优先级任务在等待的时候,有一个中优先级任务将低优先级任务的cpu资源剥夺了,则低优先级任务必须等待中优先级任务释放cpu资源才能继续执行,那么实际导致高优先级任务需要等待中优先级任务,也就造成了优先级反转。
对于上面出现的问题,一个解决方法就是优先级继承,也就是如果低优先级任务已经在临界区,而有一个高优先级任务在等待进入相同的临界区,则让低优先级任务继承高优先级任务的优先级,这样就不会出现中优先级任务抢占低优先级任务的cpu资源的情况,因为低优先级任务继承了高优先级。