在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(不會一直等,但如果可以得到鎖,那就拿到鎖,不會光判斷而不擷取鎖),該函數隻執行一次,不會一直等到得到鎖為止。
---------------------
原文連結:https://blog.csdn.net/qq_36969386/article/details/85072605