public Mutex ( bool initiallyOwned, string name, out bool createdNew )
若是爲 true,則給予調用線程已命名的系統互斥體的初始所屬權(若是已命名的系統互斥體是經過此調用建立的);不然爲 false。函數
Mutex 的名稱。若是值爲 空引用(在 Visual Basic 中爲 Nothing),則 Mutex 是未命名的。spa
static void Main(string[] args) { Thread th1 = new Thread(Thread1); Thread th2 = new Thread(Thread2); th1.Start(); th2.Start(); Console.ReadKey(); } public static void Thread1() { bool bCreatedNewMutex; Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex); //若是名爲"HAHA"的互斥鎖不存在,返回參數bCreatedNewMutex爲true,不然爲false if (bCreatedNewMutex) //若是名爲「HAHA」的互斥鎖不存在 { Console.WriteLine("th1裝逼成功"); } else { Console.WriteLine("th1裝逼失敗"); } } public static void Thread2() { bool bCreatedNewMutex; Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex); if (bCreatedNewMutex) { Console.WriteLine("th2裝逼成功"); } else { Console.WriteLine("th2裝逼失敗"); } }
2、使用了垃圾回收線程
static void Main(string[] args) { Thread th1 = new Thread(Thread1); Thread th2 = new Thread(Thread2); th1.Start(); th2.Start(); Console.ReadKey(); } public static void Thread1() { bool bCreatedNewMutex; Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex); if (bCreatedNewMutex) { Console.WriteLine("th1裝逼成功"); } else { Console.WriteLine("th1裝逼失敗"); } } public static void Thread2() { Thread.Sleep(1000); //做用是等th1執行完畢,不然會報錯:因爲出現被放棄的 mutex,等待過程結束。 GC.Collect(); GC.WaitForPendingFinalizers(); bool bCreatedNewMutex; Mutex m = new Mutex(true, "HAHA", out bCreatedNewMutex); m.WaitOne(); if (bCreatedNewMutex) { Console.WriteLine("th2裝逼成功"); } else { Console.WriteLine("th2裝逼失敗"); } m.ReleaseMutex(); }