本文主要是介绍基于STM32F103移植华为LiteOS—互斥锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
基本概念
互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理。
任意时刻互斥锁的状态只有两种,开锁或闭锁。当有任务持有时,互斥锁处于闭锁状态,这个任务获得该互斥锁的所有权。当该任务释放它时,该互斥锁被开锁,任务失去该互斥锁的所有权。当一个任务持有互斥锁时,其他任务将不能再对该互斥锁进行开锁或持有。
多任务环境下往往存在多个任务竞争同一共享资源的应用场景,互斥锁可被用于对共享资源的保护从而实现独占式访问。另外,互斥锁可以解决信号量存在的优先级翻转问题。
Huawei LiteOS提供的互斥锁具有如下特点:
通过优先级继承算法,解决优先级翻转问题。
运作机制
互斥锁运作原理
多任务环境下会存在多个任务访问同一公共资源的场景,而有些公共资源是非共享的,需要任务进行独占式处理。互斥锁怎样来避免这种冲突呢?
用互斥锁处理非共享资源的同步访问时,如果有任务访问该资源,则互斥锁为加锁状态。此时其他任务如果想访问这个公共资源则会被阻塞,直到互斥锁被持有该锁的任务释放后,其他任务才能重新访问该公共资源,此时互斥锁再次上锁,如此确保同一时刻只有一个任务正在访问这个公共资源,保证了公共资源操作的完整性。
互斥锁与二值信号量最大的区别是:
互斥锁具有优先级继承机制,而信号量没有。 也就是说,某个临界资源受到一个互斥锁保护。任务访问该资源时需要获得互斥锁,如果这个资源正在被一个低优先级任务使用,那么此时的互斥锁是闭锁状态, 其他任务不能获得该互斥锁,如果此时一个高优先级任务想要访问该资源,那么高优先级任务会因为获取不到互斥锁而进入阻塞态,系统会将当前持有该互斥锁任务的优先级临时提升到与高优先级任务相同, 这就是优先级继承机制,它确保高优先级任务进入阻塞状态的时间尽可能短,以及将已经出现的“优先级翻转”危害降低到最小。
注意事项
1、两个任务不能对同一把互斥锁加锁。如果某任务对已被持有的互斥锁加锁,则该任务会被挂起,直到持有该锁的任务对互斥锁解锁,才能执行对这把互斥锁的加锁操作。
2、互斥锁不能在中断服务程序中使用。
3、Huawei LiteOS作为实时操作系统需要保证任务调度的实时性,尽量避免任务的长时间阻塞,因此在获得互斥锁之后,应该尽快释放互斥锁。
4、持有互斥锁的过程中,不得再调用LOS_TaskPriSet等接口更改持有互斥锁任务的优先级
操作函数及说明
二值信号量与互斥锁之间的区别
这篇关于基于STM32F103移植华为LiteOS—互斥锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!