其他分享
首页 > 其他分享> > 优先级翻转问题

优先级翻转问题

作者:互联网

例子1:

考虑一台计算机有两个进程,H优先级较高,L优先级较低。 调度规则规定只要H处于就绪态它就可以运行。 在某一时刻,L处于临界区中,此时H变到就绪态准备运行(例如,一条I/O操作结束)。现在H开 始忙等待,但由于当H就绪时L不会被调度,也就无法离开临界区,所以H将永远忙等待下去。

例子2:

假定一个进程中有三个线程Thread1(高)、Thread2(中)和Thread3(低),考虑下图的执行情况。

当高优先级任务正等待信号量(此信号量被一个低优先级任务拥有着)的时候,一个介于两个任务优先之间的中等优先级任务开始执行——这就会导致一个高优先级任务在等待一个低优先级任务,而低优先级任务却无法执行类似死锁的情形发生。

解决方法:

解决办法就是提高占有资源任务的优先级,让它正常执行,然后释放资源,以让任务A能正常获取资源而得以执行.

A. 优先级继承(priority inheritance)

      优先级继承是指将低优先级任务的优先级提升到等待它所占有的资源的最高优先级任务的优先级.当高优先级任务由于等待资源而被阻塞时,此时资源的拥有者的优先级将会自动被提升.  
  B. 优先级天花板(priority ceilings)
      优先级天花板是指将申请某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级.(这个优先级称为该资源的优先级天花板)  
  A 和B的区别:
  优先级继承,只有当占有资源的低优先级的任务被阻塞时,才会提高占有资源任务的优先级,而优先级天花板,不论是否发生阻塞,都提升.  
解决方法参考:https://blog.csdn.net/Kendiv/article/details/1788966

 

标签:优先级,问题,任务,Thread3,Thread2,低优先级,资源,翻转
来源: https://www.cnblogs.com/wwqdata/p/12938983.html