《Linux进程管理:内核中的优先级继承互斥(rtmutex.h):防止优先级反转》https://rtoax.blog.csdn.net/article/details/116594331

什么是优先级反转(翻转)

优先级反转,是指在使用信号量时,可能会出现的这样一种不合理的现象,即:

高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。-- 从现象上来看,好像是中优先级的任务比高优先级任务具有更高的优先权。

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

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

优先级反转实例图示
  • T0时刻,Thread3运行,并获得同步资源SYNCH1;
  • T1时刻,Thread2开始运行,由于优先级高于Thread3,Thread3被抢占(未释放同步资源SYNCH1),Thread2被调度执行;
  • T2时刻,Thread1抢占Thread2;
  • T3时刻,Thread1需要同步资源SYNCH1,但SYNCH1被更低优先级的Thread3所拥有,Thread1被挂起等待该资源
  • 而此时线程Thread2和Thread3都处于可运行状态,Thread2的优先级大于Thread3的优先级,Thread2被调度执行。最终的结果是高优先级的Thread1迟迟无法得到调度,而中优先级的Thread2却能抢到CPU资源。

上述现象中,优先级最高的Thread1要得到调度,不仅需要等Thread3释放同步资源(这个很正常),而且还需要等待另外一个毫不相关的中优先级线程Thread2执行完成(这个就不合理了),会导致调度的实时性就很差了。

什么是优先级继承

优先级继承就是为了解决优先级反转问题而提出的一种优化机制。其大致原理是让低优先级线程在获得同步资源的时候(如果有高优先级的线程也需要使用该同步资源时),临时提升其优先级。以前其能更快的执行并释放同步资源。释放同步资源后再恢复其原来的优先级。

信号量优先级反转(翻转)与优先级继承相关推荐

  1. 信号量优先级反转问题记录(总是遗忘)

    1.信号量 信号量一般用于线程间同步,多个线程获取一个共享资源时,该资源信号量的count值不小于0时,取得count的线程皆可访问共享资源(类似于流量QOS中的令牌桶\通行证).当count值小于0 ...

  2. 实时操作系统和优先级反转

    实时操作系统(Real-time operating system, RTOS)是说,任务切换和中断响应的时间必须保证在多少时间内(如5us内)完成. 分为硬实时和软实操作系统: 硬实时是说必须在多少 ...

  3. 优先级翻转与优先级继承

    优先级翻转与优先级继承 田海立 2006-3-7 摘要 本文描述操作系统中的优先级翻转(Priority Inversion,也有翻译为反转,逆转或倒置的)现象以及如何用优先级继承来解决此类问题的方法 ...

  4. 优先级反转和优先级继承

    iOS的锁中有一个自选锁OSSpinLock , 这个api被标记为不推荐 , 理由就是会产生优先级反转的问题, 当时并不是特别理解这个优先级反转 . 后来在看一本书 <算法之美> 里在讲 ...

  5. 什么是优先级反转(翻转)

    优先级反转,是指在使用信号量时,可能会出现的这样一种不合理的现象,即: 高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度.但其他中等优先级的任务却能抢到CPU资源.-- 从现象上来看,好 ...

  6. 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】

    RTOS中很经典的问题.就是在使用共享资源的时候,优先级低的进程在优先级高的进程之前执行的问题.这里模拟这种情况. 下面的实验模拟了优先级反转的情况: 先定义三个线程: //优先级反转实验 rt_se ...

  7. 优先级反转和解决方法

    优先级反转的描述: 假设任务1,任务2,任务3:他们的优先级顺序分别为1 > 2 > 3.有一个稀缺资源S,S由一个信号量控制为互斥访问. 任务3正在执行,并申请到了资源S: 任务1抢占了 ...

  8. 什么是优先级反转及解决方法

    什么是优先级反转 优先级反转,是指在使用信号量时,可能会出现的这样一种不合理的现象,即: 高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度.但其他中等优先级的任务却能抢到CPU资源.-- ...

  9. 操作系统:优先级反转

    (1)什么是优先级反转 简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了.那在什么情况下会生这种情况呢? 假设三个任务准备执行,A,B,C,优先级依次是A>B>C ...

最新文章

  1. JAVA中JPasswordField实现密码的确认
  2. 计算机专业导论论文2000字,计算机专业导论论文.doc
  3. clear nTotal nNum=1计算机考试,信息学奥赛常考算法——模拟法
  4. git分支合并指定代码_git的几种实用操作(合并代码与暂存复原代码)
  5. 计算机专业英语 侯进,06年的录取名单,谁知道麻烦发到这里,谢谢啦!!!
  6. cesium+ geoserverTerrainProvide+png展示3D高程图展示
  7. javascript 技巧总结积累1-108条(正在积累中)
  8. [转载]Java Socket实战之二 多线程通信
  9. linux破解卡到抓包,请大家帮帮忙,真的是不会了,本来想做个抓包工具的,结果卡这了...
  10. linux防火墙的开启与关闭
  11. eclipse创建maven web工程,以及maven工程转化为web工程的简单介绍。
  12. CPU 显卡详细讲解
  13. 数据分析师的工作绩效到底是什么?
  14. PTA L2-003 月饼
  15. 泰坦尼克号任务-模型建立和评估
  16. 小C实例也有大梦想——自定义strlen函数
  17. CLO如何在其软件结构中集成V-RAY
  18. 使用python(Biopandas和Biopython)对蛋白质结构文件PDB进行修改
  19. matlab excel导入矩阵,如何将excel中数据导入到matlab中!Excel导入matlab生成矩阵
  20. ffmpeg + cuda(cuvid) 硬解码+像素格式转换(cpu主导)实战

热门文章

  1. Springboot 整合 Netty 实战(附源码)
  2. 如何切底卸载Oracle
  3. 使用cmd-命令运行Java项目
  4. Spring Boot快速上手
  5. VBA精彩代码分享-4
  6. 所谓中央空调VRV指的是什么
  7. easyui使用心得
  8. 201671010139 2016-2017-2 JAVA 和C语言的语法区别
  9. [转载]C#操作符??和?:
  10. 自己定义AlertDialog对话框布局