0

如何使用两个命名互斥锁实现互斥?以下代码应该可以工作,但不能:

    [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 我验证了有两个互斥句柄引用了相同的名称。这应该工作......我错过了什么?

4

1 回答 1

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();
        }
于 2012-02-24T15:27:13.523 回答