优先级反转
当高优先级线程在等待低优先级线程所拥有的资源时被无限期延迟,而低优先级线程由于存在不相关的中优先级线程而无法继续时,就会出现被称为优先级反转的现象。 结果,高优先级线程实际上被较低的中等优先级线程拒绝访问 CPU。
例如,以优先级 4 运行的线程 T1 在获取锁之后被优先级为 8 的更高优先级线程 T2 抢占。 随后,优先级为 12 的线程 T3 到达,抢占 T2,并在试图获取 T1 所持有的锁时被阻止。 此时,T1 和 T2 都已准备好运行,但由于 T2 具有更高的优先级,因此它会继续执行,从而有效阻止 T3(一个优先级较高的线程)取得进展,因为 T1 无法运行并释放锁。
线程计划程序通过名为 AutoBoost 的功能来解决此问题。 AutoBoost 自动跟踪资源预留,并通过应用线程永远不能低于的优先级下限来调整线程优先级。 例如,如果一个低优先级的线程获得了一个临界区,而一个高优先级的线程在等待临界区时被阻止,那么所有者的优先级将被提升到等待程序的最大优先级,直到它释放资源。