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

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

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

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

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

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

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

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

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

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

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

相关推荐
chase。1 分钟前
【学习笔记】AGILE:把人形机器人强化学习从“玄学”变成“工程学”
笔记·学习·敏捷流程
bu_shuo19 分钟前
git练习学习网站【中文网站】
git·学习
EnglishJun1 小时前
ARM嵌入式学习(十四)--- IMX6ULL的I2C通信实现
arm开发·学习
_李小白2 小时前
【OSG学习笔记】Day 31: 渲染到纹理(RTT)
笔记·数码相机·学习
嵌入式小企鹅2 小时前
蓝牙学习系列(七):BLE GATT 数据模型详解
学习·蓝牙·ble·蓝牙协议栈·蓝牙开发·gatt
arvin_xiaoting2 小时前
OpenClaw学习总结_III_自动化系统_3:CronJobs详解
数据库·学习·自动化
少许极端3 小时前
算法奇妙屋(四十一)-贪心算法学习之路 8
学习·算法·贪心算法
cmpxr_3 小时前
【单片机】STM32的启动流程(Keil)
stm32·单片机·嵌入式硬件
广药门徒3 小时前
嵌入式常用通信协议速率对比及布线要点全解析
单片机·嵌入式硬件
arvin_xiaoting3 小时前
OpenClaw学习总结_III_自动化系统_2:Webhooks详解
运维·学习·自动化