1、互斥锁简介
互斥锁的概念:
1、互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理。
2、任意时刻互斥锁的状态只有两种:开锁或闭锁。
3、当有任务持有时,互斥锁处于闭锁状态,这个任务获得该互斥锁的所有权。
4、当该任务释放时,该互斥锁被开锁,任务失去互斥锁的所有权。
5、当一个任务持有互斥锁时,其他任务将不能再对该互斥锁进行开锁或持有。
6、多任务环境下往往存在多个任务竞争同一共享资源的应用场景,互斥锁可被用于对共享资源的保护从而实现独占式访问。另外,互斥锁可以解决信号量存在的优先级翻转问题。
Huawei LiteOS提供的互斥锁具有如下特点:
通过优先级继承算法,解决优先级翻转问题。
2、互斥锁运作机制
运作原理
多任务环境下会存在多个任务访问同一公共资源的场景,而有些公共资源是非共享的,需要任务进行独占式处理。
互斥锁怎样来避免这种冲突呢?
用互斥锁处理非共享资源的同步访问时,如果有任务访问该资源,则互斥锁为加锁状态。此时其他任务如果想访问这个公共资源则会被阻塞,直到互斥锁被持有该锁的任务释放后,其他任务才能重新访问该公共资源,此时互斥锁再次上锁,如此确保同一时刻只有一个任务正在访问这个公共资源,保证了公共资源操作的完整性。
就像我们排队上洗手间,里面的人满了,门被锁住了,那么我们只能等待他出来,开锁之后我们才能进去。
3、互斥锁使用场景与开发流程
使用场景
1、互斥锁可以提供任务之间的互斥机制,用来防止两个任务在同一时刻访问相同的共享资源。
2、除此之外,互斥锁还可以被用于防止多任务同步时造成优先级翻转的问题。
四部开发流程,分别是创建、申请、释放、删除。删除操作可以根据需要而定。
申请互斥锁时的三种模式,其实本质都是要等待开锁,删除互斥锁之后,互斥锁就失去了他的功能。
注意事项
1、两个任务不能对同一把互斥锁加锁。如果某任务对已被持有的互斥锁加锁,则该任务会被挂起,直到持有该锁的任务对互斥锁解锁,才能执行对这把互斥锁的加锁操作。
2、互斥锁不能在中断服务程序中使用。
3、Huawei LiteOS作为实时操作系统需要保证任务调度的实时性,尽量避免任务的长时间阻塞,因此在获得互斥锁之后,应该尽快释放互斥锁。
4、持有互斥锁的过程中,不得再调用优先级调整等接口函数更改持有互斥锁任务的优先级。
4、操作系统抽象层简介
OSAL的互斥锁API:
接口名 | 功能描述 |
---|