[RT-Thread]互斥锁(mutex)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[RT-Thread]互斥锁(mutex)相关的知识,希望对你有一定的参考价值。

参考技术A 和 semaphore 一样, mutex 在RTT中也归类为 ipc ( ipc 应该是进程间通信,感觉命名是不是有点不贴切)。
mutex 用于资源互斥的场景,比如多个线程可能同时访问(R/W)同一个全局变量,这个时候,就需要加锁控制。

仍然主要关注 mutex控制块 、 take 和 release 操作。

parent :
和其它 ipc 方式相同,主要是维护 suspend_thread 。
value :
value其实就两个值:0或者1,1表示已被持有,0表示空闲状态。
original_priority :
保存持有该mutex的thread的本来的线程优先级,便于优先级继承后,恢复原本线程优先级。
hold :
hold 记录被同一thread请求的次数,嵌套场景。
owner :
持有该mutex的thread。

6.5 linux内核互斥锁

参考技术A 互斥锁是信号量的特例。信号量的初始值表示有多少个任务可以同时访问共享资源,如果初始值为1,表示只有1个任务可以访问,信号量变成互斥锁(Mutex)。
1.同一时间只能有一个任务持有互斥锁,而且只有这个任务可以对互斥锁进行解锁。
2.使用中的互斥锁是不能被重新初始化的。
3.并且互斥锁不能用于中断上下文。

mutex结构体

mutex初始化

mutex加锁

mutex解锁

1、mutex初始化
a) 动态初始化

b) 静态初始化

2、mutex加锁

3、mutex解锁

drivers/input/evdev.c

以上是关于[RT-Thread]互斥锁(mutex)的主要内容,如果未能解决你的问题,请参考以下文章

互斥锁的示例

C++封装互斥锁和基于RAII机制能自动解锁的互斥锁

[C++11 多线程同步] --- 互斥锁

互斥锁Mutex:鸿蒙轻内核中处理临界资源独占的“法官”

Linux-线程同步之互斥锁

互斥锁mutex的使用