优先级反转

【勇芳软件工作室】汉化HomePreviousNext

当具有不同优先级的两个或更多个线程在竞争中被调度时,发生优先级反转。考虑一个简单的情况,三个线程:线程1,线程2和线程3。线程1是高优先级,并且准备好被安排。线程2是一个低优先级线程,正在一个关键部分执行代码。线程1,高优先级线程,开始从线程2等待共享资源。线程3具有中等优先级。线程3接收所有的处理器时间,因为高优先级线程(线程1)正在等待来自低优先级线程(线程2)的共享资源。线程2不会离开关键部分,因为没有最高优先级,不会被安排。

Windows NT:调度程序通过随机提升准备好的线程(在这种情况下是低优先级锁持有者)的优先级来解决这个问题。低优先级线程运行足够长的时间以退出关键部分,高优先级线程可以进入关键部分。如果低优先级线程第一次没有足够的CPU时间来退出关键部分,那么在下一轮调度中会有另一个机会。

Windows 95:如果高优先级线程依赖于低优先级线程,由于中等优先级线程获得所有CPU时间,该优先级线程将不允许运行,则系统会识别高优先级线程依赖于低优先级线程这将提高低优先级线程的优先级,直到高优先级线程的优先级。这将允许以前具有最低优先级的线程运行,并释放等待它的高优先级线程。