当前位置: 首页 > news >正文

3、优先级翻转问题

FreeRTOS优先级翻转是当高优先级任务因等待低优先级任务占用的资源(如互斥锁)被阻塞,而中优先级任务趁机执行,导致高优先级任务无法及时运行的调度异常。

  1. 场景示例

    • 任务优先级:存在三个任务,优先级从高到低为 Task_H(高)Task_M(中)Task_L(低)

    • 共享资源:Task_L 和 Task_H 都需要访问某个共享资源(如互斥锁 Mutex)。

    • 执行流程

      1. Task_L 获取 Mutex,开始操作共享资源。

      2. Task_H 就绪,尝试获取 Mutex,但发现已被占用,因此被阻塞。

      3. 此时,Task_M(中等优先级)开始运行,抢占 Task_L。

      4. Task_L 因被 Task_M 抢占,无法及时释放 Mutex,导致 Task_H 被长期阻塞。

    结果:高优先级任务 Task_H 被低优先级任务 Task_L 间接阻塞,而 Task_M(与共享资源无关)反而优先执行,破坏了实时性。

FreeRTOS 的解决方案

1. 优先级继承(Priority Inheritance)
  1. 机制:当高优先级任务因等待 Mutex 被阻塞时,持有该 Mutex 的低优先级任务会临时继承高优先级任务的优先级。

  2. 效果:低优先级任务 Task_L 的优先级被提升到与 Task_H 相同,从而能快速执行并释放 Mutex,避免被 Task_M 抢占。

  3. 触发条件:使用 xSemaphoreCreateMutex() 创建的互斥锁默认启用优先级继承。

优先级继承无法完全解决优先级翻转,只是在某些情况下将影响降至最低。

相关文章:

  • Ubuntu中部署deepseek
  • 【漫话机器学习系列】101.特征选择法之Lasso(Lasso For Feature Selection)
  • 离子阱量子计算机的原理与应用:开辟量子计算的新天地
  • 代码随想录|62.不同路径,63.不同路径Ⅱ,343.整数拆分
  • 论文笔记(七十二)Reward Centering(四)
  • Linux系统移植之对NXP的Uboot修改后移植
  • 给SQL server数据库表字段添加注释SQL,附修改、删除注释SQL及演示
  • Comfyui Windows Desktop桌面版便携版安装教程
  • 深入了解 MySQL 中的 JSON_CONTAINS
  • com库原理使用
  • Python 环境管理介绍
  • 【DeepSeek-R1背后的技术】系列十一:RAG原理介绍和本地部署(DeepSeek+RAGFlow构建个人知识库)
  • 基于 go-rwt 在 Windows 环境下对 Go Web 应用进行 HTTP 压力测试
  • 数仓搭建实操(传统数仓oracle):DWD数据明细层
  • Python绘画案例2——用Python写动态小人发射爱心~~,包含源码
  • C++ 类和对象(友元、内部类、匿名对像)
  • c++第一课(基础c)
  • 【Python爬虫(55)】Scrapy进阶:深入剖析下载器与下载中间件
  • 服务器系统都更新到windowsserver2025了
  • 完美解决:.vmx 配置文件是由 VMware 产品创建,但该产品与此版 VMware Workstation 不兼容
  • 外交部亚洲司司长刘劲松向菲方严肃交涉
  • 发布亮眼一季度报后,东阿阿胶股价跌停:现金流隐忧引发争议
  • 长三角议事厅·周报|长三角游戏出海,关键在“生态输出”
  • 新干式二尖瓣瓣膜国内上市,专家:重视瓣膜病全生命周期管理
  • “下山虎”张名扬一回合摘下“狮心”:你们再嘘一个给我听听
  • 我国首个大型通用光谱望远镜JUST在青海启动建设