0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

开发过程中是什么原因导致优先级翻转的?

RTThread物联网操作系统 ? 来源:Rice嵌入式开发技术分享 ? 作者:Rice嵌入式开发技术 ? 2021-05-28 15:28 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

最近在开发过程中,遇到一个问题线程优先级翻转的问题。那什么原因导致优先级翻转呢?

RTOS开发中,优先级翻转问题也是值得我们去关注留意的。避免代码瘫痪。

什么是优先级翻转

所谓的优先级翻转问题:即当一个高优先级线程通过信号量机制访问共享资源时,该型号量以被一个低优先级线程占有,而这个低优先级的任务在访问共享资源时可能又被一个中等优先级任务抢占。从上面的描述,高优先级线程被许多较低优先级的任务阻塞,导致高优先级的实时性得不到保证。

举例:有三个线程分别为:A、B、C。优先级A 》 B 》 C,线程A和B处于挂起状态,等待某一事件发生,线程C正在运行,此时任务C开始使用共享资源Source。在使用Source时,线程A等待事件到来,线程A转为就绪态,因为线程A优先级比线程C高,所以线程A会立即执行。当线程A要使用共享资源Source时,由于共享资源Source正在被线程C使用,因此线程A被挂起,线程C开始运行。如果此时中等优先级线程B等待事件到来,则线程B转为就绪态。由于线程B优先级比线程C高,因此线程B开始运行,直到其运行完毕,线程C才开始运行。直到线程C释放共享资源Source后,线程A才得以执行。在这种情况下,优先级发生了翻转,线程B先于线程A运行。

如何解决优先级翻转

解决优先级翻转的方法:优先级天花板、优先级继承。那么这两种方法有什么?

优先级天花板优先级天花板是当线程申请某资源时,把该线程的优先级提升到可访问这个资源的所有线程中的最高优先级,这个优先级称为该资源的优先级天花板。这种方法简单易行,不必进行复杂的判断,不管线程是否阻塞了高优先级线程的运行, 只要线程访问共享资源都会提升线程的优先级。

优先级继承优先级继承是当线程A申请共享资源Source时,如果共享资源Source正在被线程C使用,通过比较线程C与自身的优先级,如发现线程C的优先级小于自身的优先级, 则将线程C的优先级提升到自身的优先级,线程C释放资源Source后,再恢复线程C的原优先级。这种方法只在占有资源的低优先级线程阻塞了高优先级线程时才动态的改变线程的优先级。

RT-Thread是如何解决线程优先级翻转呢?

在官方的文档中,对线程优先级翻转有相对应的说明及解决方法。下面我把RT-THREAD官方的描述及解决方法贴出来。

使用信号量会导致的另一个潜在问题是线程优先级翻转问题。所谓优先级翻转,即当一个高优先级线程试图通过信号量机制访问共享资源时,如果该信号量已被一低优先级线程持有,而这个低优先级线程在运行过程中可能又被其它一些中等优先级的线程抢占,因此造成高优先级线程被许多具有较低优先级的线程阻塞,实时性难以得到保证。如下图所示:有优先级为 A、B 和 C 的三个线程,优先级 A 》 B 》 C。线程 A,B 处于挂起状态,等待某一事件触发,线程 C 正在运行,此时线程 C 开始使用某一共享资源 M。在使用过程中,线程 A 等待的事件到来,线程 A 转为就绪态,因为它比线程 C 优先级高,所以立即执行。但是当线程 A 要使用共享资源 M 时,由于其正在被线程 C 使用,因此线程 A 被挂起切换到线程 C 运行。如果此时线程 B 等待的事件到来,则线程 B 转为就绪态。由于线程 B 的优先级比线程 C 高,因此线程 B 开始运行,直到其运行完毕,线程 C 才开始运行。只有当线程 C 释放共享资源 M 后,线程 A 才得以执行。在这种情况下,优先级发生了翻转:线程 B 先于线程 A 运行。这样便不能保证高优先级线程的响应时间。

c24609a4-be57-11eb-9e57-12bb97331649.png

在 RT-Thread 操作系统中,互斥量可以解决优先级翻转问题,实现的是优先级继承算法。优先级继承是通过在线程 A 尝试获取共享资源而被挂起的期间内,将线程 C 的优先级提升到线程 A 的优先级别,从而解决优先级翻转引起的问题。这样能够防止 C(间接地防止 A)被 B 抢占,如下图所示。优先级继承是指,提高某个占有某种资源的低优先级线程的优先级,使之与所有等待该资源的线程中优先级最高的那个线程的优先级相等,然后执行,而当这个低优先级线程释放该资源时,优先级重新回到初始设定。因此,继承优先级的线程避免了系统资源被任何中间优先级的线程抢占。

c2536888-be57-11eb-9e57-12bb97331649.png

说明

对于我们开发来说,要避免发生优先级翻转的问题。

优先级翻转的危害:

任务调度时,时间不确定性,破坏实时系统的实时性,严重时可能导致系统崩溃。

优先级低的任务比优先级高的任务更先执行,导致任务的错乱,逻辑的错乱。

原文标题:线程优先级翻转,如何避免?

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5158

    文章

    19735

    浏览量

    318738
  • RTOS
    +关注

    关注

    24

    文章

    851

    浏览量

    121351

原文标题:线程优先级翻转,如何避免?

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TLe9893怎么调整外设的中断优先级

    你好林工,我该怎么调整外设的中断优先级?是否可以通过工具调整?默认设置下,是不是Brdv的在中断优先级高于T20和can?
    发表于 08-01 06:20

    请问C0系列单片机中断优先级只有4吗?

    C0系列单片机中断优先级只有4?C071在配置的时候只能配置0-3
    发表于 07-23 08:00

    使用CY7C65213开发过程中,应该用哪个interface进行uart通信?

    在使用CY7C65213开发过程中,我想用CyUartRead读数据,但是好像没有接口的deviceType是CY_TYPE_UART,想请问我应该用哪个interface进行uart通信? 是否有相关指导文件,或描述符指导?
    发表于 06-03 07:04

    CyU3PDebugPrint的最高优先级和最低优先级是什么?

    [i]CyU3PDebugPrint的最高优先级和最低优先级是什么?
    发表于 05-13 08:22

    6.12.1升到6.13老是闪退是什么原因导致的?

    6.12.1升到6.13老是闪退,回到6.12.1又正常,问一下大家是什么原因导致,有什么解决办法?
    发表于 03-11 08:13

    配电柜—断电危机?配电柜故障排查优先级指南

    在排查配电柜故障过程中,合理安排排查优先级至关重要。下面聊一下如何科学合理安排配电柜故障排查优先级顺序。
    的头像 发表于 03-06 18:55 ?461次阅读
    配电柜—断电危机?配电柜故障排查<b class='flag-5'>优先级</b>指南

    在linux下开发过程中, DLP4500 GUI无法连接光机怎么解决?

    在linux下开发过程中, DLP4500 GUI 无法连接光机,出现错误提示如下: open device_handle error: Is a directory opening path
    发表于 02-20 08:41

    储能变流器小功率充电过程中功率不稳定是什么原因

    储能变流器小功率充电过程中功率不稳定是什么原因
    发表于 12-13 21:54

    TAS5411-Q1调试过程中,一上电就报错是什么原因

    您好,这颗TAS5411-Q1这颗料再调试过程中,出现故障,一上电就报错,如下图,能帮忙看看什么原因吗?
    发表于 10-09 07:24

    使用CH32V103C8TC设置中断优先级分组时,编译报错的原因

    使用CH32V103C8TC设置中断优先级分组时,设置为NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);编译报错 而使用NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 却不会报错 这是
    发表于 09-27 06:03

    freertos中断优先级在哪设置

    FreeRTOS是一个流行的实时操作系统,它广泛应用于嵌入式系统开发。在FreeRTOS,中断优先级是一个重要的概念,因为它决定了中断处理的顺序和响应时间。 1. 理解中断优先级
    的头像 发表于 09-02 14:17 ?1645次阅读

    用vca821做测试,发现测试过程中芯片会发烫,这是什么原因呢?

    我最近在用vca821做测试,发现测试过程中芯片会发烫,但是工作状态似乎有是正常的。请问这是什么原因呢?
    发表于 08-23 08:18

    什么原因导致压力传感器漂移?

    什么原因导致压力传感器漂移的呢?我们在设计的时候怎么才能消除压力传感器漂移呢?
    的头像 发表于 08-22 18:00 ?1850次阅读
    <b class='flag-5'>什么原因</b><b class='flag-5'>导致</b>压力传感器漂移?

    使用AFE03作为接收机的过程中,是什么原因造成噪声的产生?

    AFE032在使用AFE03作为接收机的过程中,我们发现在没有任何信号输入的时候AD能够采集到60KHz和120KHz的幅值大约为60mVpp的正弦波信号,在断开AFE032后AD就采不到该噪声
    发表于 08-07 08:04

    OPA4192在使用过程中,芯片发烫是什么原因导致的?

    OPA4192在使用过程中,芯片发烫,我们的供电电压是正负16V,是因为供电电压太高导致的嘛?有这方面的数据嘛?
    发表于 08-05 07:27