十九、互斥量(互斥锁)
创始人
2025-05-31 19:32:43
0

文章目录

  • 1、基本概念
  • 2、使用场景:用于实现对临界资源的独占式处理(能够解决使用资源冲突问题,即只有一个资源,但很多任务都想使用时)
  • 3、如何理解互斥量的必要性
  • 4、创建互斥量
  • 5、删除互斥量
  • 6、释放互斥量(即开锁)
  • 7、获得互斥量(即上锁)
  • 8、死锁问题
    • (1)如何理解死锁
    • (2)如何解决死锁问题

1、基本概念

在这里插入图片描述

互斥量即互斥信号量,是特殊的二值信号量,比二值信号量多了一个优先级继承,它与信号量不同的是,它支持互斥量所有权、递归访问以及防止优先级翻转的特性,用于实现对临界资源的独占式处理。

任何时刻互斥量的状态只有两种:开锁和闭锁。

​ 当互斥量被任务持有时,该互斥量处于闭锁状态,这个任务获得互斥量的所有权。释放互斥量时,则处于开锁状态。

​ 当一个任务持有互斥量时,其他任务不能再对该互斥量进行开锁或持有。持有该互斥量的任务也能够再次获得这个锁而不被挂起,即递归访问。

​ 实行同步二值信号量是最好的选择,互斥量更多的是用于保护资源的互锁。

2、使用场景:用于实现对临界资源的独占式处理(能够解决使用资源冲突问题,即只有一个资源,但很多任务都想使用时)

如何理解互斥量的使用场景:(互斥量也被称为互斥锁)
1)互斥量初始值为 1
2)任务 A 想访问临界资源,先获得并占有互斥量,然后开始访问
3)任务 B 也想访问临界资源,也要先获得互斥量:被别人占有了,于是阻塞
4)任务 A 使用完毕,释放互斥量;任务 B 被唤醒、得到并占有互斥量,然后开始访问临界资源
5)任务 B 使用完毕,释放互斥量
正常来说:在任务 A 占有互斥量的过程中,任务 B、任务 C 等等,都无法释放互斥量。但是 FreeRTOS 未实现这点:任务 A 占有互斥量的情况下,任务 B 也可释放互斥量。

3、如何理解互斥量的必要性

优先级继承:
即当低优先级的任务获取了互斥量还没释放时,一个高优先级的任务也想获取互斥量,此时高优先级的任务会获取互斥量失败,当它愿意等待互斥量时会将低优先级的任务的优先级暂时提高到和自己的一样,直到其释放互斥量的时候再恢复其原来的优先级并换唤醒刚等待互斥量的任务。(借助下图理解)
在这里插入图片描述

4、创建互斥量

/* 创建一个互斥量,返回它的句柄。
* 此函数内部会分配互斥量结构体
* 返回值: 返回句柄,非 NULL 表示成功
*/
SemaphoreHandle_t xSemaphoreCreateMutex( void );
/* 创建一个互斥量,返回它的句柄。
* 此函数无需动态分配内存,所以需要先有一个 StaticSemaphore_t 结构体,并传入它的指
针
* 返回值: 返回句柄,非 NULL 表示成功
*/
SemaphoreHandle_t xSemaphoreCreateMutexStatic( StaticSemaphore_t *pxMutexBuffer );

5、删除互斥量

 xSemaphore: 信号量句柄,你要删除哪个信号量, 互斥量也是一种信号量
*/
void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );

6、释放互斥量(即开锁)

/* 释放 */
BaseType_t xSemaphoreGive( SemaphoreHandle_t xSemaphore );
/* 释放(ISR 版本) */
BaseType_t xSemaphoreGiveFromISR(SemaphoreHandle_t xSemaphoreBaseType_t *pxHigherPriorityTaskWoken);

7、获得互斥量(即上锁)

/* 获得 */
BaseType_t xSemaphoreTake(SemaphoreHandle_t xSemaphore,TickType_t xTicksToWait);
/* 获得(ISR 版本) */
xSemaphoreGiveFromISR(SemaphoreHandle_t xSemaphore,BaseType_t *pxHigherPriorityTaskWoken);

8、死锁问题

(1)如何理解死锁

在这里插入图片描述

(2)如何解决死锁问题

递归锁解决了FreeRTOS中开关锁的缺陷,即实现了谁上锁就由谁解锁
在这里插入图片描述

相关内容

热门资讯

安卓系统应用数据目录,揭秘系统... 你有没有想过,你的安卓手机里那些应用,它们的数据都藏在哪个角落呢?今天,就让我带你一探究竟,揭开安卓...
kindle 安卓 系统 刷机... 亲爱的读者们,你是不是也和我一样,对电子阅读设备情有独钟?尤其是那款小巧便携的Kindle,简直是阅...
平板 win 安卓 双系统,... 你有没有想过,拥有一台既能运行Windows系统,又能流畅使用安卓应用的多功能平板电脑,是不是能让你...
电脑安卓和苹果系统,电脑操作系... 你有没有发现,现在无论是工作还是娱乐,电脑已经成了我们生活中不可或缺的好伙伴呢!而在这众多电脑中,安...
手机安卓系统下载5.0,引领智... 你有没有发现,最近手机界又掀起了一股热潮?没错,就是安卓系统5.0的下载。这可是安卓家族里的一大亮点...
小森生活系统安卓,打造绿色生态... 你知道吗?最近在手机应用市场上,有个叫做“小森生活系统安卓”的新玩意儿火得一塌糊涂。它就像一个神奇的...
王者荣耀安卓系统更换,畅享全新... 最近是不是发现你的王者荣耀游戏体验有点不对劲?别急,让我来给你揭秘一下安卓系统更换背后的那些事儿!一...
ios系统数据如何导入安卓系统... 你是不是也有过这样的经历:手机里存满了珍贵的照片、视频和联系人,突然有一天,你决定换一台安卓手机,却...
王者荣耀启动安卓系统,畅享指尖... 你知道吗?最近王者荣耀可是大动作连连,竟然宣布要启动安卓系统了!这消息一出,瞬间在游戏圈引起了不小的...
安卓始终显示系统栏,安卓系统栏... 你是不是也遇到了这个问题?手机屏幕上那个讨厌的系统栏,有时候它就像一个顽皮的小鬼,总是赖在你的屏幕上...
苹果系统可以装在安卓,探索跨平... 你知道吗?最近在科技圈里可是掀起了一股热潮呢!那就是——苹果系统竟然可以装在安卓设备上!是不是听起来...
安卓系统双清目的,安卓系统双清... 你知道吗?最近在安卓系统圈子里,有个话题可是热得不得了,那就是“双清”。别小看这个“双清”,它可是关...
安卓系统台电平板,畅享智能生活... 你有没有发现,最近身边的朋友都开始讨论起一款叫做台电的安卓系统平板电脑呢?这可不是随便说说,这款平板...
三菱安卓系统,智能科技与驾驶体... 亲爱的读者,你是否曾好奇过,那些在我们生活中默默无闻的汽车品牌,它们是如何将科技与驾驶体验完美结合的...
安卓系统为什么好,引领智能生活... 你有没有发现,身边的朋友、同事,甚至家人,几乎人手一台安卓手机?这可不是偶然现象哦!安卓系统,这个来...
安卓如何改键盘系统,Andro... 你是不是也和我一样,对安卓手机的键盘系统有点儿不满意?想要换一个更顺手的键盘,但又不知道怎么操作?别...
怎么升级安卓14系统,解锁安卓... 你有没有发现,你的安卓手机最近是不是有点儿慢吞吞的?别急,别急,升级到安卓14系统,让你的手机焕发新...
安卓手机如何系统内录,轻松生成... 你有没有想过,有时候想要记录下手机里的精彩瞬间,却发现没有合适的工具?别急,今天就来教你怎么在安卓手...
最绚丽的安卓系统,最绚丽版本全... 哇,你知道吗?在安卓的世界里,有一款系统,它就像是一颗璀璨的明珠,闪耀着最绚丽的色彩。它就是——最绚...
小米系统安卓通知权限,深度解析... 亲爱的手机控们,你是否曾为手机通知栏里乱糟糟的信息而烦恼?又或者,你是否好奇过,为什么有些应用总是能...