嵌入式系统设计师 · 高频练习

高优先级任务等待低优先级任务释放锁,为什么会被中优先级任务继续拖延?

中级 单选题 第 957 题 中等 嵌入式系统设计师优先级反转优先级继承互斥锁实时调度
题目

实时系统中,低优先级任务 L 持有互斥锁,高优先级任务 H 申请该锁后阻塞。此时不使用该锁的中优先级任务 M 不断抢占 L,使 H 长时间无法继续。较合适的缓解机制是()。

A 永久降低任务 H 的优先级
B 在 L 持锁期间临时继承 H 的优先级,释放锁后恢复原优先级
C 让任务 M 同时获得同一把互斥锁
D 关闭任务切换,系统以后只运行任务 L
题目类型:原创高频练习题 用途:用于帮助理解嵌入式系统设计师相关考点和答案解析,不等同于官方真题。
正确答案
B
答案解析

优先级继承让持有 H 所需资源的 L 临时提升到较高优先级,减少被 M 抢占的机会,使 L 尽快完成临界区并释放锁;释放后再恢复原优先级。

选项分析

A

错误。降低H的优先级会破坏实时任务的紧迫性定义,也没有让L更快释放资源。

B

正确。L临时继承阻塞任务的较高优先级,可减少中优先级任务造成的额外延迟。

C

错误。互斥锁的目的就是避免多个任务同时进入受保护临界区。

D

错误。长期禁止任务切换会破坏并发与实时响应,不是正常的资源访问协议。

本题为什么容易错

很多同学只看到 H 等 L,就以为这只是普通互斥阻塞。题眼其实是 M 不需要这把锁,却能不断抢占 L,把 H 的等待放大,这才是典型优先级反转。

先看结论

简短答案

高优先级任务等待低优先级任务释放锁,为什么会被中优先级任务继续拖延,正确答案是 B(在 L 持锁期间临时继承 H 的优先级,释放锁后恢复原优先级)。优先级继承让持有 H 所需资源的 L 临时提升到较高优先级,减少被 M 抢占的机会,使 L 尽快完成临界区并释放锁;释放后再恢复原优先级。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
永久降低任务 H 的优先级 本题干扰项 错误。降低H的优先级会破坏实时任务的紧迫性定义,也没有让L更快释放资源。 看到该词不要急着选,先判断是否真正解决题干问题
在 L 持锁期间临时继承 H 的优先级,释放锁后恢复原优先级 本题正确答案 正确。L临时继承阻塞任务的较高优先级,可减少中优先级任务造成的额外延迟。 看到题干核心场景时优先联想到它
让任务 M 同时获得同一把互斥锁 本题干扰项 错误。互斥锁的目的就是避免多个任务同时进入受保护临界区。 看到该词不要急着选,先判断是否真正解决题干问题
关闭任务切换,系统以后只运行任务 L 本题干扰项 错误。长期禁止任务切换会破坏并发与实时响应,不是正常的资源访问协议。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 永久降低任务 H 的优先级:错误。降低H的优先级会破坏实时任务的紧迫性定义,也没有让L更快释放资源。
  • 让任务 M 同时获得同一把互斥锁:错误。互斥锁的目的就是避免多个任务同时进入受保护临界区。
  • 关闭任务切换,系统以后只运行任务 L:错误。长期禁止任务切换会破坏并发与实时响应,不是正常的资源访问协议。
复习

知识点详解

实时系统关注最坏响应时间。低优先级任务持有高优先级任务所需的互斥资源时,高任务会发生直接阻塞;若中优先级任务还能抢占低任务,阻塞时间可能被进一步拉长。优先级继承协议让资源持有者临时获得等待者中的较高优先级,完成临界区并释放资源后恢复。它能缓解无界反转,但设计仍需控制临界区长度、嵌套锁和死锁风险。

备考速记

H等L,M又压L;让L临时借H的优先级,先还锁再恢复。

实时调度在实时调度场景中的作用

实时调度在本题中的核心价值,是解决“实时系统中,低优先级任务 L 持有互斥锁,高优先级任务 H 申请该锁后阻塞。此时不使用该锁的中优先级任务 M 不断抢占 L,使 H 长时间无法继续。较合适的缓解机制是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 根据高、中、低任务时间线识别优先级反转。
  • 判断优先级继承发生和撤销的时机。
实时调度在嵌入式系统设计师软考中的考法

软考选择题通常不会只考概念定义,还会把实时调度放到实时调度场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

按时间线看最清楚:L 先拿锁,H 后来要锁却只能等;本来只需等 L 很短时间,M 却因为优先级高于 L,一次次把 L 赶下 CPU,结果 H 也跟着等。优先级继承就是让 L 在这段持锁时间里“代替 H 着急”,先把临界区做完。锁一释放,L 的临时优先级就撤销。

考点定位

优先级反转不是调度器把优先级数字写反了,而是高优先级任务间接被低优先级任务阻塞,并被无关的中优先级任务延长等待。

易错提醒

  • 临界区里执行耗时I/O,让继承后的高优先级占用持续过久。
  • 任务嵌套持有多把锁,却没有统一锁顺序和协议。
  • 释放锁后未正确撤销临时提升,导致后续调度异常。

备考提示

  • 画出L持锁、H阻塞、M抢占、L释放四个时刻,再看继承前后差别。
  • 把优先级继承与优先级天花板分别记住适用条件,不要只背名称。

你可能还想了解

  • 优先级反转和普通阻塞有什么区别?
  • 优先级继承什么时候恢复原优先级?
  • 优先级继承能否完全避免死锁?

本文小结

优先级反转中,高优先级任务等待低优先级任务的锁,中优先级任务又持续抢占低任务。优先级继承可让持锁者临时提升优先级,尽快释放资源。