我是靠谱客的博主 飘逸御姐,最近开发中收集的这篇文章主要介绍优先级反转,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是优先级反转
优先级反转的含义是说高优先级的任务被迫等待低优先级任务执行。因为多进程共享资源, 当出现互斥资源访问时,基于优先级调度会有如下这种现象:三个任务task1, task2, task3,优先级 task1 > task2 > task3,当task1和task2某种原因被阻塞时,task3调度执行,task3执行时占用互斥资源A执行临界区代码时,很巧task1这时从阻塞状态恢复,基于优先级的调度会立即调度到task1执行,而task1执行时又需要持有互斥资源A,因此task1再度进入阻塞状态,等待task3执行。task3执行还未释放互斥资源A,这时task2从阻塞状态恢复立马得到调度执行并一直等到task2执行完毕。这时就相当于高优先级的task1需要等待中优先级的task2执行了,这就是优先级反转。(task2没有资源关联)说白了就是,低优先级的任务占有高优先级的任务所需要的资源!某一时刻高、低优先级任务都在就绪,中间优先级由于没有资源关联,因此可以运行,这就出现了高优先级任务等待低优先级任务,也即是低优先级任务由于高优先级任务的执行!

如何避免优先级反转?解决优先级反转有许多方法,普遍使用的有两种:优先级继承;极限优先级。优先级继承:当高优先级的任务需要等待低优先级任务释放互斥资源时,暂时先把低优先级任务的优先级提升至和高优先级任务优先级一样。这样就确保了不会有其他中优先级任务抢占执行。(ecos产品使用这种)极限优先级:当任务占用互斥资源执行临界区代码时,先把该任务的优先级提升至极限优先级(系统最高优先级),等到释放资源时再降回原有优先级。两者的区别优先级继承:只有一个任务访问资源时一切照旧,没有区别,只有当高优先级任务因为资源被低优先级占有而被阻塞时,才会提高占有资源任务的优先级;而优先级天花板,不论是否发生阻塞,都提升,即谁先拿到资源,就将这个任务提升到该资源的天花板优先级。

最后

以上就是飘逸御姐为你收集整理的优先级反转的全部内容,希望文章能够帮你解决优先级反转所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部