优先级倒置

Ric*_*o M 5 multithreading computer-science

我在理解优先级倒置时遇到问题

文章摘录:

考虑有一个任务L,优先级低.此任务需要资源R.考虑L正在运行并且它获取资源R.现在,还有另一个具有高优先级的任务H. 此任务还需要资源R.考虑H在L获得资源R之后开始.现在H必须等到L放弃资源R.

到目前为止,一切都按预期工作,但是在此期间新任务M以中等优先级启动时会出现问题.`由于R仍​​然在使用(由L),H无法运行.由于M是优先级最高的未阻塞任务,因此它将被安排在L之前.由于L已经被M抢占,L不能放弃R.所以M将一直运行直到它完成,然后L将运行 - 至少到达一个点它可以放弃R - 然后H会运行.因此,在上述场景中,具有中等优先级的任务在具有高优先级的任务之前运行,从而有效地给予我们优先级倒置.

这个问题与文章的第二部分有关.为什么具有H(较高)优先级的进程不能抢占具有L(较低)优先级的进程,但具有M(中等)优先级的进程可以先发制人?即如果在使用R之后H被阻止,为什么M也不被阻挡?

Cho*_*ett 4

因为M不需要资源R,所以它可以在L仍在使用时运行;另一方面,在 L 能够释放 R 之前,H 无法运行。