2012-02-24 117 views
0

如何使用兩個命名互斥鎖實現互斥?下面的代碼應該工作,但它並不:互斥不與.NET互斥鎖類工作

[TestMethod] 
    public void xdfgndygfn() 
    { 
     using (var mutex1 = new Mutex(false, "1234")) 
     using (var mutex2 = new Mutex(false, "1234")) 
     { 
      mutex1.WaitOne(); 
      mutex2.WaitOne(); //this should block, but it doesn't 
     } 
    } 

使用Process Explorer的我覈實,有兩個互斥處理指的是相同的名稱。這應該工作...我錯過了什麼?

回答

3

MSDN

擁有互斥可以請求在重複調用WaitOne的相同的互斥而不阻斷它的執行線程。

這是一個測試,以驗證這一點(測試將無法完成):

 using (var mutex1 = new Mutex(false, "1234")) 
     using (var mutex2 = new Mutex(false, "1234")) 
     { 
      var t1 = new Thread(() => 
       { 
        mutex1.WaitOne(); 
        Thread.Sleep(1000000); 
       }); 
      var t2 = new Thread(() => 
       { 
        mutex2.WaitOne(); 
        Thread.Sleep(1000000); 
       }); 

      t1.Start(); 
      t2.Start(); 

      t1.Join(); 
      t2.Join(); 
     } 
+1

這是問題。我將測試代碼添加到您的答案中。在9分鐘我會接受你的答案(系統限制)。 – usr 2012-02-24 15:30:19