using (var mutex = new Mutex(false, "name")) { try { mutex.WaitOne(); //do something } catch(Exception ex) { throw ex; } finally { mutex.ReleaseMutex(); } }
1、initiallyOwned表示創建mutex的線程是否擁有該互斥體。true表示創建線程擁有互斥鎖,只有在創建線程中調用ReleaseMutex釋放后,其他等待線程才能參與搶奪互斥體的活動。false表示互斥鎖體於與空閑狀態,其他等待互斥鎖的線程立即參與到搶奪互斥鎖的活動中去。
2、在上面程序中如果創建mutex時使用true參數,故在啟動其他線程后必須執行mutex.ReleaseMutex(),如果不釋放mutex,則其他線程將一直等待下去。使用ture,相當於一創建就使用waitone()
3、mutex.WaitOne()與mutex.ReleaseMutex()要像 { } 一樣配對使用,否則將出現 "由於出現被放棄的 mutex,等待過程結束" 的異常
4、mutex與monitor相比,沒有暫時釋放的功能;因此mutex一經釋放,原釋放資源的線程也將重新參與新一輪對mutex的爭奪過程。