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

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

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

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

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

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

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

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

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

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

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

相关推荐
碧海银沙音频科技研究院1 小时前
基于炬芯ATS308X 设计的上位机usb 串口音乐EQ调节工具
stm32·单片机·嵌入式硬件
apple-mapping3 小时前
网络RTK定位学习总结
学习·网络rtk
三佛科技-134163842124 小时前
过认证72W碳化硅方案(12V6A)主控HN1562+HN36228V 典型应用电路、变压器参数分享
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
楚山之石4 小时前
【Lancet Neurology 】多发性硬化认知障碍的 SDMT 筛查、灰质萎缩标志与认知康复循证路径
图像处理·人工智能·学习·mri
Brilliantwxx5 小时前
【STM32】 内部 Flash 详解:寄存器逐位拆解 + 工作流程顺序全讲 + EEPROM再实现
stm32·单片机·嵌入式硬件·1024程序员节
木子单片机6 小时前
基于单片机的DS18B20温度传感器测温系统设计
单片机·嵌入式硬件·51单片机·keil
海海不掉头发6 小时前
CSDN博客_时序预测9模型复现对比
人工智能·学习·软件工程
华清远见IT开放实验室6 小时前
实验室建设案例 | 安徽三联学院物联网实验室
stm32·单片机·嵌入式硬件·物联网·华清远见
Zw-awa6 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
stm32
深圳光特通信豆子8 小时前
TTL 光模块在工业控制与串口通信中的应用指南(10M BIDI 单模系列)
单片机·嵌入式硬件