当前位置: 首页 > 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 不兼容
  • 观察|印巴交火开始升级,是否会升级为第四次印巴战争?
  • 外交部发言人就当前印巴局势答记者问
  • 打造多元文旅消费场景,第四届长三角城市戏剧节启幕
  • 湖北十堰市委副秘书长管聪履新丹江口市代市长
  • IPO周报|节后首批3只新股本周申购,色谱设备龙头来了
  • 贵州召开全省安全生产电视电话会议:以最严要求最实举措守牢安全底线