天天看點

Qt中QMutex的一點了解

在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

Qt

繼續閱讀