互斥鎖mutex的使用


            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的爭奪過程。


免責聲明!

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



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