RT_Thread应用9—互斥量1

第二十章 互斥量(第一部分)

一、互斥量基本概念

互斥量作用:保护资源的互锁
在这里插入图片描述
过程:用于互锁的互斥量可以充当保护资源的令牌。当一个线程希望访问某个资源时,它必须先获取令牌。当线程使用完资源后,必须还回令牌,以便其它线程可以访问该资源。

在之前的信号量提到关于线程优先级翻转的问题,互斥量可以通过优先级继承算法,降低优先级翻转问题产生的影响
用于临界资源的保护一般使用互斥量

二、优先级继承机制

目的😗:为了降低优先级翻转问题
含义:暂时提高某个占有某种资源的低优先级线程的优先级,使之与在所有等待该资源的线程中优先级最高那个线程的优先级相等,而当这个低优先级线程执行完毕释放该资源时,优先级重新回到初始设定值
翻转危害::导致系统的高优先级线程阻塞时间过长
例子
————————————优先级翻转——————————
假设 3 个线程分别为 H 线程(High)、M 线程(Middle)、L 线程
(Low),3 个线程的优先级顺序为 H 线程>M 线程>L 线程。
正常运行的时候 H 线程可以打断 M 线程与 L 线程,M 线程可以打断 L 线程,假设系统中有一个资源被保护了,此时该资源被 L 线程正在使用中,
在这里插入图片描述
(1):L 线程正在使用某临界资源, H 线程被唤醒,执行 H 线程。但 L 线程并未执行完毕,此时临界资源还未释放。
(2):这个时刻 H 线程也要对该临界资源进行访问,但 L 线程还未释放资源,由于保护机制,H 线程进入阻塞态,L 线程得以继续运行,此时已经发生了优先级翻转现象。
(3):某个时刻 M 线程被唤醒,由于 M 线程的优先级高于 L 线程, M 线程抢占了 CPU 的使用权,M 线程开始运行,此时 L 线程尚未执行完,临界资源还没被释放。
(4):M 线程运行结束,归还 CPU 使用权,L 线程继续运行。
(5):L 线程运行结束,释放临界资源,H 线程得以对资源进行访问,H 线程开始运行。

从图中可以看见高优先级的H线程等待L+M的时间,如果H线程处理的是紧急事件,这样对系统是非常危险的
———————————使用优先级翻转————————————
在这里插入图片描述
(1):L 线程正在使用某临界资源,L 线程正在使用某临界资源, H 线程被唤醒,执行 H 线程。但 L 线程并未执行完毕,此时临界资源还未释放。
(2):某一时刻 H 线程也要对该资源进行访问,由于保护机制,H 线程进入阻塞态。此时发生优先级继承,系统将 L 线程的优先级暂时提升到与 H 线程优先级相同,L线程继续执行。
(3):在某一时刻 M 线程被唤醒,由于此时 M 线程的优先级暂时低于 L 线程, M 线程仅在就绪态,而无法获得 CPU 使用权。
(4):L 线程运行完毕,H 线程获得对资源的访问权,H 线程从阻塞态变成运行态,此时 L 线程的优先级会变回原来的优先级。
(5):当 H 线程运行完毕,M 线程得到 CPU 使用权,开始执行。
(6):系统正常运行,按照设定好的优先级运行。
注意:在线程持有互斥量的这段时间,不得更改线程的优先级。

三、互斥量应用场景

  • 线程可能会多次获取互斥量的情况下。这样可以避免同一线程多次递归持有而造成死锁的问题;
  • 可能会引起优先级翻转的情况;

假设::有2个线程需要使用串口发送数据,硬件资源只有一个,可以用互斥量对串口资源进行保护,当一个线程正在使用串口的时候,另一个线程则无法使用串口,等到线程使用串口完毕之后,另外一个线程才能获得串口的使用权。
需要注意的是互斥量不能在中断服务函数中使用。

四、运作机制

在这里插入图片描述
(1):互斥量具有优先级继承机制,一般选择使用互斥量对资源进行保护,如果资源被占用的时候,无论是什么优先级的线程想要使用该资源都会被阻塞。
(2):假如正在使用该资源的线程 1 比阻塞中的线程 2 的优先级还低,那么线程1 将被系统临时提升到与高优先级线程 2 相等的优先级(线程 1 的优先级从 L 变成 H)。
(3):当线程 1 使用完资源之后,释放互斥量,此时线程 1 的优先级会从 H 变回原来的 L。
(4)-(5):线程 2 此时可以获得互斥量,然后进行资源的访问,当线程 2 访问了资源的时候,该互斥量的状态又为闭锁状态,其他线程无法获取互斥量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值