c 對於mutex互斥量的深入理解

2021-07-05 04:37:43 字數 1408 閱讀 8089

互斥鎖(mutex)

互斥鎖是乙個互斥的同步物件,意味著同一時間有且僅有乙個執行緒可以獲取它。

互斥鎖可適用於乙個共享資源每次只能被乙個執行緒訪問的情況

函式://建立乙個處於未獲取狀態的互斥鎖

public mutex();

//如果owned為true,互斥鎖的初始狀態就是被主線程所獲取,否則處於未獲取狀態

public mutex(bool owned);

如果要獲取乙個互斥鎖。應呼叫互斥鎖上的waitone()方法,該方法繼承於thread.waithandle類

它處於等到狀態直至所呼叫互斥鎖可以被獲取,因此該方法將組織住主調執行緒直到指定的互斥鎖可用,如果不需要擁有互斥鎖,用releasemutex方法釋放,從而使互斥鎖可以被另外乙個執行緒所獲取

//public mutex(bool owned,name,out flag);

name為互斥量的名字,也就是說在作業系統中只有乙個命名為name的互斥量mutex,如果乙個執行緒得到這個name的互斥鎖,其他執行緒就無法得到這個互斥鎖了,必須等待那個執行緒對這個執行緒釋放

參考別人的部落格的**實驗

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading;

[stathread]

static void main(string args)

else

console.readline();}}

}執行以上**生成的應用程式第乙個例項,會得到結果

running

保持第乙個執行狀態,執行第二個例項,得到結果

another is running

以上**中建立了乙個mutex,從其引數的解釋中得知,第乙個呼叫執行緒將得到互斥體的初始所屬權,如果不釋放的話,其他的執行緒得不到互斥體所有權

1.執行兩個工程,同時將以上**放入工程中,第乙個工程執行,得到結果

running

保持第乙個執行狀態,執行第二個工程,得到結果

another is running

2.將乙個工程中的system.threading.mutex mutex = new system.threading.mutex(true, "test", out flag);改為

system.threading.mutex mutex = new system.threading.mutex(true, "test1", out flag);

然後第乙個工程執行,得到結果

running

保持第乙個執行狀態,執行第二個工程,得到結果

running

則說明在系統中,mutex的name是在系統中是唯一的。

C 執行緒同步互斥量Mutex

一 互斥物件 互斥物件屬於系統核心物件,它能夠使執行緒擁有對某個資源的絕對訪問權。互斥物件主要包含使用數量 執行緒id 遞迴計數器等。執行緒id表示當前擁有互斥物件的執行緒,遞迴計數器表示執行緒擁有互斥物件的次數。1 當互斥物件的執行緒id為0時,表示互斥物件不被任何執行緒所擁有,此時系統會發出該互...

各種Mutex(互斥量)的區別

原文 各種mutex的區別如下表 鎖型別初始化方式 加解鎖特徵 排程特徵 普通鎖pthread mutex initializer 同一執行緒可重複加鎖,解鎖一次釋放鎖 先等待鎖的程序先獲得鎖 巢狀鎖pthread recursive mutex initializer np 同一執行緒可重複加鎖,...

各種Mutex(互斥量)的區別

原文 各種mutex的區別如下表 鎖型別初始化方式 加解鎖特徵 排程特徵 普通鎖pthread mutex initializer 同一執行緒可重複加鎖,解鎖一次釋放鎖 先等待鎖的程序先獲得鎖 巢狀鎖pthread recursive mutex initializer np 同一執行緒可重複加鎖,...