嵌入式开发学习日志53——互斥量

互斥信号量,也成为互斥量,是一种特殊的二值信号量。也就是说,在创建时互斥量有且只有一个,一般它会被用于临界资源的保护。

何为临界资源?通俗点说,就是有且只有一个的资源,一旦它被某个任务占据,其他任务就需要等待这个资源被释放后才能使用,而这又可以称作互斥访问。

互斥量正适合于这样的场合。由于互斥量仅有一个,那么对于那些想要使用某个临界资源的任务来说,只有最高优先级的会被分配到互斥量,此时其他任务由于没有互斥量,所以只能进入阻塞状态,等待该任务释放资源。

那么有人要问了,既然都是一个,为什么不直接用二值信号量来保护临界资源呢?

前面就说了,互斥量是一种特殊的二值信号量,这个特殊之处,就是互斥量脱颖而出的关键所在------它具有优先级继承机制

但是谈论优先级继承之前,还需要了解一个概念,叫做**优先级翻转。**这名字一听就知道不是什么好东西,而事实也确实如此。很多情况下,有的资源被设置为仅有一份,而此时若一个低优先级任务正在使用该资源,那么不好意思,即使你优先级再高的任务也得在后面给我乖乖排队,只有低优先级任务释放资源后,高优先级任务才能使用。

更糟糕的是,若在高优先级任务阻塞期间,有一个中优先级任务就绪,而这个任务还不需要用到这个资源,那么不好意思,这个低优先级任务要被打断,将CPU使用权交给中优先级任务。等中优先级任务执行完后,低优先级任务继续执行,直到资源释放给高优先级任务,此时高优先级任务等待时间将会更长。

而我们知道,优先级这东西在一开始就已经定好,越重要越紧急的任务往往优先级就会越高,往往也会优先执行。那么此时一个不那么重要的任务打断了本该执行的高优先级任务,使得阻塞时间过长,这对系统会是一个灾难。

而优先级继承机制将这个翻转的危害降到了最低(并非完全解决)。它的机制就是将占据某种资源的低优先级任务的优先级暂时抬高,提高到等待这个资源的高优先级任务的优先级,这样即使中途有中优先级任务就绪也无法抢占CPU,而当这个任务执行完释放资源后,优先级又会恢复到一开始的级别,此时高优先级任务就可以使用了。这种机制极大缩短了高优先级任务的阻塞时间。

经过上述历程可以看出,互斥量十分适合应用于多任务环境下对于临界资源的保护,而多任务也是操作系统的灵魂。

相关推荐
做cv的小昊2 小时前
大语言模型系统:【CMU 11-868】课程学习笔记02——GPU编程基础1(GPU Programming Basics 1)
人工智能·笔记·学习·语言模型·llm·transformer·agent
炽烈小老头7 小时前
【每天学习一点算法 2026/03/08】相交链表
学习·算法·链表
串口哑火达人7 小时前
(六)RT-Thread网络通信--AT组件与ESP8266
c语言·单片机·嵌入式硬件·mcu·物联网
qq_411262428 小时前
把esp32-c2当单片机用,不用wifi,如何配置,节省更多内存
单片机·嵌入式硬件
red_redemption9 小时前
自由学习记录(130)
学习·soa·aos·ecs已成核心包·shading!=ps
双叶8369 小时前
(Python)Python爬虫入门教程:从零开始学习网页抓取(爬虫教学)(Python教学)
后端·爬虫·python·学习
天外来鹿10 小时前
Map/Set/WeakMap/WeakSet学习笔记
前端·javascript·笔记·学习
kaikaile199510 小时前
农业物联网基于STM32的LoRa无线通信系统设计与实现
stm32·嵌入式硬件·物联网
峥嵘life10 小时前
Android16 【GTS】 GtsDevicePolicyTestCases 测试存在Failed项
android·linux·学习
leixj02510 小时前
SVN学习笔记
笔记·学习·svn