博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多进程多线程优先级理解--优先级反转【转】
阅读量:7116 次
发布时间:2019-06-28

本文共 805 字,大约阅读时间需要 2 分钟。

本文转载自:

1. 优先级反转(Priority Inversion)

    由于多进程共享资源,具有最高优先权的进程被低优先级进程阻塞,反而使具有中优先级的进程先于高优先级的进程执行,导致系统的崩溃。这就是所谓的优先级反转(Priority Inversion)。

2. 产生原因

      其实,优先级反转是在高优级(假设为A)的任务要访问一个被低优先级任务(假设为C)占有的资源时,被阻塞.而此时又有优先级高于占有资源的任务(C)而低于被阻塞的任务(A)的优先级的任务(假设为B)时,于是,占有资源的任务就被挂起(占有的资源仍为它占有),因为占有资源的任务优先级很低,所以,它可能一直被另外的任务挂起.而它占有的资源也就一直不能释放,这样,引起任务A一直没办法执行.而比它优先低的任务却可以执行.  

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

3. 解决方案 ( 优先级继承 / 优先级天花板 )

   目前解决优先级反转有许多种方法。其中普遍使用的有2种方法:一种被称作优先级继承(priority inheritance);另一种被称作优先级极限(priority ceilings)。

  A. 优先级继承(priority inheritance) 

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

你可能感兴趣的文章
Arx 函数
查看>>
verilog语法实例学习(13)
查看>>
iOS/oc取消arc[转]
查看>>
关于硅谷的文化
查看>>
注册表单验证
查看>>
except ShortInputException,x中逗号
查看>>
Yii快速入门教程
查看>>
xshell与虚拟机对接
查看>>
关于网站编程Alex
查看>>
leetcode-804-Unique Morse Code Words
查看>>
Angular企业级开发(3)-Angular MVC实现
查看>>
递归大总结之位运算实现加法
查看>>
filter()和map()
查看>>
如何快速阅读源码
查看>>
磁盘扩容
查看>>
PHP大小写问题
查看>>
纯代码自动布局
查看>>
utf-8 转码--网址转码
查看>>
用js实现算法:冒泡排序、插入排序和快速排序
查看>>
Css学习总结(1)——20个很有用的CSS技巧
查看>>