C#中Mutex的用法


C#中Mutex是互斥鎖,位於System.Threading 命名空間中。

顧名思義,它是一個互斥的對象,同一時間只有一個線程可以擁有它,該類還可用於進程間同步的同步基元。

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

線程使用Mutex.WaitOne()方法等待C# Mutex對象被釋放,如果它等待的C# Mutex對象被釋放了,它就自動擁有這個對象,直到它調用Mutex.ReleaseMutex()方法釋放這個對象,而在此期間,其他想要獲取這個C# Mutex對象的線程都只有等待。

我們可以利用這個特性來控制一個應用程序只能運行一個實例。其他實例由於得不到這個Mutex而不能運行。

代碼如下所示


這里先運行一個實例,然后再運行第二個,通過日志可以查看啟動過程,如下所示

從日志可以看出,當第二個實例想運行的時候,由於已經有一個進程擁有了這個互斥鎖,此進程不能擁有,所以進程啟動被終止。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM