只有1个实例使用Mutex误会?

时间:2012-06-19 19:35:24

标签: c# .net multithreading .net-4.0 mutex

class OneAtATimePlease
{
    static void Main()
    {

        using (var mutex = new Mutex(false, "oreilly.com OneAtATimeDemo"))
        {
            if (mutex.WaitOne(TimeSpan.FromSeconds(3), false))
                RunProgram();
            else
            {
                Console.WriteLine("Another instance of the app is running. Bye!");
                return;
            }
        }
    }
    static void RunProgram()
    {
        Console.WriteLine("Running. Press Enter to exit");
        Console.ReadLine();
    }
}

但这些行等待某人调用Set()函数:

 if (mutex.WaitOne(TimeSpan.FromSeconds(3), false))
                RunProgram();

谁在这里打电话给set?这个帖子永远不会被释放......(或将会?)

我错过了什么?

1 个答案:

答案 0 :(得分:1)

如果有人没有运行,WaitOne()会立即返回true。否则,它阻止!然后程序结束,导致其中一个等待程序立即返回true。