一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

在Qt的多线程控制中,互斥量的访问最简单的控制是添加一个mutex锁,对一个函数或者变量锁定。

一直不理解QMutex中的锁是如何运行的,或者说如何利用这个锁将变量进行锁定。官方实例是这样的:

 1 QMutex mutex;
 2 int number = 6;
 3 
 4 void method1()
 5 {
 6     mutex.lock();
 7     number *= 5;
 8     number /= 4;
 9     mutex.unlock();
10 }
11 
12 void method2()
13 {
14     mutex.lock();
15     number *= 3;
16     number /= 2;
17     mutex.unlock();
18 }

  还是看不懂为什么会锁住变量,主要是没办法根据这个试例进行实验,后经过各种查资料研究一遍遍的试代码,还有从别人博客中的只言片语中,发现有这么一句话:“QMutex::lock()获取一个锁”。

  这说明只有一个锁,只能被一个QMutex得到,如果QMutex得不到这个锁,那它将不会执行紧随其后的代码,也就是在两个进程代码中需要共用一个QMutex类的实例,这样才能保证该实例是否获取到一个锁或者得不到一个锁。

  如果QMutex::lock()得不到这个锁,那么它将会一直等直到得到该锁为止,而另一个方法QMutex::tryLock()可以检测当前是否可以得到这个锁,如果可以得到则返回1,否则返回0(不会一直等,但如果可以得到锁,那就拿到锁,不会光判断而不获取锁),该函数只执行一次,不会一直等到得到锁为止。

posted on 2021-04-14 11:13  一杯清酒邀明月  阅读(424)  评论(0编辑  收藏  举报