linux下互斥锁mutex,貌似锁不上呢

linux下互斥锁mutex,貌似锁不上呢,第1张

线程的效果就是同一时间各个线程都在执行

加锁不是给线程上锁

pthread_mutex_lock(&qlock)表示尝试去把qlock上锁,它会先判断qlock是否已经上锁,如果已经上锁这个线程就会停在这一步直到其他线程把锁解开。它才继续运行。

所以代码中要么是线程1先执行完后执行线程2,要么就是线程2先执行,再执行线程1.而线程3一开始就执行了。

互斥量mutex是用来给多线程之间的贡献资源上锁的。也就是同一个时间只允许一个线程去访问该资源(资源:比如对文件的写 *** 作)。

现在来回答楼主的问题:

不是只要在pthread_mutex_lock(&qlock)与pthread_mutex_unlock(&qlock)之间的代码执行,其他的都不能介入吗?

其他的都不能介入,不是整个进程只运行这一个线程,其他线程都停住了。

“不能介入“这个动作需要程序员自己设计来保证:好比前面提到的文件读写 *** 作。为了防止多个线程同时对文件进行写入 *** 作,这就需要把资源上锁了。

如果只有线程1加锁,那是不是这个锁就没有意义了呢?

这个理解可以有

unlock之后休眠一下

pthread_mutex_unlock(&mutex)/*释放互斥锁*/

sleep(1)

pthread1 start running!

pthread2 start running!

gnum=:1

gsub=:99

gnum=:2

gsub=:98

gnum=:3

gsub=:97

gnum=:4

gsub=:96

gnum=:5

互斥锁是信号量的特例。信号量的初始值表示有多少个任务可以同时访问共享资源,如果初始值为1,表示只有1个任务可以访问,信号量变成互斥锁(Mutex)。

1.同一时间只能有一个任务持有互斥锁,而且只有这个任务可以对互斥锁进行解锁。

2.使用中的互斥锁是不能被重新初始化的。

3.并且互斥锁不能用于中断上下文。

mutex结构体

mutex初始化

mutex加锁

mutex解锁

1、mutex初始化

a) 动态初始化

b) 静态初始化

2、mutex加锁

3、mutex解锁

drivers/input/evdev.c


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/9017594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存