關於Mutex的建構函式引數設定

2021-06-26 19:32:57 字數 872 閱讀 1203

mutex的英文解釋就是互斥體,也就是執行緒或者程序在同時訪問乙個資源的時候,是需要排他訪問,也就是說乙個時間段內只能有乙個執行緒物件訪問公共資源。

mutex的建構函式分為mutex(),mutex(boolean),mutex(boolean, string)。

下面就較這3個建構函式分別進行比較分析。

1、  mutex()這樣乙個建構函式相當於執行了mutex(false),這樣乙個建構函式,msdn上說,這樣構造的物件,其所屬的執行緒並不擁有互斥體。我覺得應該是執行緒不擁有互斥體的所有權才對。

2、  mutex(boolean)在csdn上說的就是如果是true則表示擁有互斥體的所有權,false表示不擁有互斥體的所有權。

3、  mutex(boolean, string)表示構造乙個指定name的互斥體,boolean表示是否有該互斥體的所有權。應為mutex是乙個系統全域性物件,因此,就算每次去new乙個mutex,如果name一樣,那麼也就只是構造了乙個mutex物件。boolean引數表示了執行緒是否擁有該物件的初始所有權,如果是true的話,那麼應該由該執行緒第乙個建立該互斥體,整個系統中不應該有第二個執行緒去建立它。否則會報出「由於出現被放棄的 mutex,等待過程結束。」的錯誤。

例子:public

class

threadmutex

public

void thread1()

public

void thread2()

所以,在msdn上說,「由於沒有機制來確定是否建立了已命名的系統互斥體,因此,當呼叫此建構函式過載時,最好將 initiallyowned 指定為 false。」

所以,最好是在構建mutex物件的時候,使用new mutex(false, 「***」)來構建乙個mutex物件。

關於QT構造函式引數parent的解釋

比如說我在標頭檔案裡定義了乙個類 class paintwidget public qwidget 然後在cpp中寫 paintwidget paintwidget qwidget parent qwidget parent 意思是說,重定義父物件。如何重定義呢?看parent引數。當paintwi...

關於建構函式的介紹(四) 使用預設引數的建構函式

有預設引數的建構函式 建構函式中引數的值既可以通過實參傳遞,也可以指定為某些預設值,即如果使用者不指定實參值,編譯系統就使形參的值為預設值。一般來說在類中宣告建構函式的時候,給那些帶有形參的變數直接賦予初值,之後,再在類外進行具體函式體的編寫。或者直接在類中進行定義建構函式的的時候,給形參變數指定數...

關於建構函式的預設構造

拷貝建構函式 是用於當乙個 使用者自定義型別的物件 作為函式引數時,系統預設 的拷貝建構函式 不能達到目地,這時需要用到 使用者自己定義 的拷貝建構函式 通常是 類的私有成員裡有起到重要作用的指標變數 當進行函式引數的 值傳遞 時,系統會呼叫 拷貝建構函式 如果沒有 自定義 拷貝建構函式 則系統會呼...