白话解释“优先级翻转”。

简介:
    优先级翻转发生的条件:
    1、首先发生翻转需要有三个任务,它们的优先级分别是高、中、低。
    2、低优先级和高优先级都需要take同一个信号量。
     优先级翻转的过程:
    1、低优先级先take到信号量。
    2、低优先级被中优先级任务抢占。(然后低优先级任务就只能等中优先级任务执行完,再继续执行之后,才能释放信号量了)
    3、高优先级需要take该信号量了,但是由于中优先级任务运行时间长,低优先级任务又霸占住信号量不放,高优先级无奈被阻塞了。(一般高优先级任务都是要快速完成一些需要及时处理的事情,被阻塞可是大事)
    这样的现象就叫优先级翻转,因为高优先级它无法抢占低的,不“高”了,当然就是翻转了。
     避免优先级翻转的办法:
    使用互斥信号量,并且设置防优先级翻转参数(SEM_INVERSION_SAFE )。
     防止优先级翻转的原理:
    改变在于上面的过程中的第1步,低优先级take到该信号量的时候,系统就搜索该信号量还可能被哪些任务使用,然后就把该低优先级任务的优先级调整到这些任务中最高的一个那么高。
    这样,起码低优先级运行到释放信号量,高优先级也就立即能运行了,就不会出现中优先级任务长时间运行使得高优先级任务无休止等待的情况了。   
      注意两个前提条件:
1、信号量持有时间尽可能短。(这是写代码过程中就要注意的,做到这一点,就可以保证高优先级不用等低优先级任务太久)
2、高优先级任务执行非常快。(这也是任务设计的要求,高优先级应该只处理那些紧急而且快速的事情。)
所以不会出现中优先级抢占,但无法抢占而带来问题。因为上述两点决定了它们耽误的时间非常短,不会对中优先级造成影响。
















本文转sinojelly51CTO博客,原文链接:http://blog.51cto.com/sinojelly/200891 ,如需转载请自行联系原作者
相关文章
|
域名解析
超简单 图解 三级域名解析
超简单 图解 三级域名解析 最近自己在玩 搭建 ngrok 内网穿透,用到了三级域名解析,类似:blog.ngrok.xxx.com 查了下,发现这类的教程非常少,于是,我来造福你们了 下面开始 一、添加二级域名解析 主机记录填写你要使用的二级域名,我填的ngrok, 记录值填你服务器的IP地址 二、添加三级域名解析 主机记录填写 你要用的(三级域名.二级域名)我这里是泛解析,用了*.ngrok,你可以泛解析到你的二级域名,记录值填写你刚刚添加的二级域名。
12644 3
|
存储 负载均衡 NoSQL
MongoDB·最佳实践·count不准原因分析
背景 一般来说,除了由于secondary延迟可能造成查询secondary节点数据不准以外,关于count的准确性问题,在MongoDB4.0官方文档中有这么一段话On a sharded cluster, db.
|
10月前
|
Cloud Native 安全 开发工具
阿里云 EMAS携手开发者,共建更优质的HarmonyOS NEXT应用生态
阿里云移动研发平台 EMAS(Enterprise Mobile Application Studio,简称EMAS)是国内领先的云原生应用开发平台, 基于广泛的云原生技术致力于为企业、开发者提供一站式的应用研发管理服务,涵盖开发、测试、运营等应用全生命周期。
【ubuntu】ubuntu20.04安装ros noetic(亲测有效,附操作步骤)
【ubuntu】ubuntu20.04安装ros noetic(亲测有效,附操作步骤)
|
机器学习/深度学习 人工智能 TensorFlow
生成完美口型同步的 AI 数字人视频
在当今数字媒体和人工智能技术的推动下,生成完美口型同步的AI数字人视频成为备受关注的研究领域。本研究旨在开发一种技术,能够实现生成完美口型同步的AI数字人视频,使虚拟人物的口型与语音内容完美匹配。采用了深度学习方法,结合了语音识别、面部运动生成和视频合成技术,以实现这一目标。通过语音识别模型将输入的文本转换为音频波形,利用面部运动生成模型根据音频波形生成对应的面部动作序列,这些动作序列可以准确地反映出发音的口型和面部表情,最后生成口型同步的AI数字人视频。这项技术具有广泛的应用前景,可用于虚拟主持人、教育视频、学习平台等领域,提升视频内容的真实感和沟通效果。
987 0
|
JavaScript 网络协议 API
Node.js中的WebSockets:实现实时通信的利器
【4月更文挑战第30天】本文介绍了如何在Node.js中利用WebSockets实现实时通信。WebSockets是全双工的网络协议,提供低延迟、高效率的通信,适合实时应用。在Node.js中,可使用`ws`库创建WebSocket服务器和客户端。通过监听`connection`、`message`等事件,实现双向通信。示例展示了服务器端和客户端的基本设置,为构建实时通信应用奠定了基础。
|
机器学习/深度学习 人工智能 Ubuntu
【ubuntu】ubuntu常见错误及解决方案
【ubuntu】ubuntu常见错误及解决方案
|
机器学习/深度学习 PyTorch 算法框架/工具
pytorch中非标量调用backward()的时候为什么要先进行sum操作
在《动手学深度学习》第二版教程中,当y为非标量的时候,调用backward()函数时,为什么先要求和呢(即y.sum().backward()),估计很多读者有点懵,今天小编给大家说说我的理解。
744 3
|
安全 算法 网络安全
填坑:IPsec不同安全协议的报文封装结构对比
填坑:IPsec不同安全协议的报文封装结构对比
填坑:IPsec不同安全协议的报文封装结构对比
|
消息中间件 存储 分布式计算
kafka学习线路指导入门:包括理论、部署、实战知识汇总整理
kafka学习线路指导入门:包括理论、部署、实战知识汇总整理
707 0

热门文章

最新文章