C 互斥鎖Mutex類的用法

2021-10-23 13:06:44 字數 1254 閱讀 8554

c#中mutex是互斥鎖,位於system.threading命名空間中。

顧名思義,它是乙個互斥的物件,同一時間只有乙個執行緒可以擁有它,該類還可用於程序間同步的同步基元。

如果當前有乙個執行緒擁有它,在沒有釋放之前,其它執行緒是沒有權利擁有它的。我們可以把mutex看作洗手間,上廁所的人看作執行緒;上廁所的人先進洗手間,擁有使用權,上完廁所之後出來,把洗手間釋放,其他人才可以使用。

執行緒使用mutex.waitone()方法等待c#mutex物件被釋放,如果它等待的c#mutex物件被釋放了,它就自動擁有這個物件,直到它呼叫mutex.releasemutex()方法釋放這個物件,而在此期間,其他想要獲取這個c#mutex物件的執行緒都只有等待。

我們可以利用這個特性來控制乙個應用程式只能執行乙個例項(單例)。其他例項由於得不到這個mutex而不能執行。

**如下所示:

using system;

using system.threading;

public

class

}private

static

mutex m_mutex;

private

static

readonly

string m_name ="";

///

/// 程序是否可以建立

///

/// 是否可以建立

private

static

bool

cancreate()

}

這裡先執行乙個例項,然後再執行第二個,通過日誌可以檢視啟動過程,如下所示:

2016-11-23 13:47:05 -[ warn]- can't run the environment now, because one instance is already running!

從日誌可以看出,當第二個例項想執行的時候,由於已經有乙個程序擁有了這個互斥鎖,此程序不能擁有,所以程序啟動被終止。

此外還需說明一點,mutexname是在系統中是唯一的,也就是上述**中的name,系統依靠這個name屬性來標識唯一的mutex

C 實現mutex 互斥鎖

思路 實現mutex最重要的就是實現它的lock 方法和unlock 方法。我們儲存乙個全域性變數flag,flag 1表明該鎖已經鎖住,flag 0表明鎖沒有鎖住。實現lock 時,使用乙個while迴圈不斷檢測flag是否等於1,如果等於1就一直迴圈。然後將flag設定為1 unlock 方法就...

c 互斥鎖(Mutex)使用詳解

互斥鎖 mutex 互斥鎖是乙個互斥的同步物件,意味著同一時間有且僅有乙個執行緒可以獲取它。互斥鎖可適用於乙個共享資源每次只能被乙個執行緒訪問的情況 函式 建立乙個處於未獲取狀態的互斥鎖 public mutex 如果owned為true,互斥鎖的初始狀態就是被主線程所獲取,否則處於未獲取狀態 pu...

互斥鎖 mutex 的使用

互斥鎖的使用範圍 互斥鎖 mutex 是在原子操作api的基礎上實現的訊號量行為。互斥鎖不能進行遞迴鎖定或解鎖,能用於互動上下文但是不能用於中斷上下文,同一時間只能有乙個任務持有互斥鎖,而且只有這個任務可以對互斥鎖進行解鎖。當無法獲取鎖時,執行緒進入睡眠等待狀態。互斥鎖的資料結構 struct mu...