天天看點

多線程互斥——Mutex的使用

MSDN的解釋為如下

命名空間: System.Threading

當兩個或多個線程需要同時通路共享的資源時,系統将需要使用同步機制來確定一次隻有一個線程使用的資源。 Mutex 是一個同步基元,授予于隻有一個線程對共享資源的獨占通路權限。 如果一個線程擷取互斥體,第二個想要擷取該互斥體挂起線程,直到第一個線程釋放此斥鎖。

static void Main(string[] args)
        {
            bool Flag = true;//布爾變量傳入,未發現此值對結果存在任何影響
            Mutex mu = new Mutex(true, "Mutex", out Flag);//初始化函數
            //Initializes a new instance of the Mutex class with a Boolean value that indicates whether 
            //the calling thread should have initial ownership of the mutex, a string that is the name 
            //of the mutex, and a Boolean value that, when the method returns, indicates whether the 
            //calling thread was granted initial ownership of the mutex.
            //mutex僅允許存在一個執行個體運作 對flag進行判斷
            if (Flag)
            {
                Console.WriteLine("FIrst");
            }
            else
            {
                Console.WriteLine("has another one");
            }
            Console.Read();
        }
           

上面的程式隻允許運作一次 再次運作會顯示已經存在執行個體

下面的代碼則是使用等待釋放互斥變量

static void Main(string[] args)
        {
            bool flag = false;
            using (var m = new Mutex(false, "t1",out flag))
            {
                //調用WaitOne方法,延遲15秒,如果15秒已存在的執行個體内釋放了,則會進入此方法
                if (!m.WaitOne(TimeSpan.FromSeconds(15), false))
                {
                    Console.WriteLine("exit has another one");
                    Console.Read();
                }
                else
                {
                    Console.WriteLine("first");
                    Console.Read();
                    m.ReleaseMutex();//釋放一次的方法
                }
            }
        }
           

繼續閱讀