2012-02-24 91 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