无法同步两个线程

时间:2012-08-09 21:29:53

标签: c# multithreading mutex semaphore

如果我这样做:

ConsoleApp1:

    bool mutexCreated;
    var mutex = new Mutex(true, "MemoryMappedFileMutex", out mutexCreated);

    Console.Write("Run Console App2 then press enter");
    Console.Read();

    // do work
    Thread.Sleep(5000);

    mutex.ReleaseMutex(); // makes console app 2 to stop waiting

ConsoleApp2

    var mutex = Mutex.OpenExisting("MemoryMappedFileMutex");

    mutex.WaitOne();

    // continue executing once console app 1 releases mutex

一切都很好。我必须首先启动consoleApp1才能使用该算法。

现在我的问题我希望consoleApp2充当服务器。因此,我想首先启动该应用程序。问题是,如果我这样做:

    bool mutexCreated;
    var mutex = new Mutex(true, "MemoryMappedFileMutex", out mutexCreated);

    mutex.WaitOne();  // <------ mutex will not wait why????

如果我做mutex.WaitOne()该线程不会等待。换句话说,我想首先启动consoleApp2并让该应用程序等到我在控制台应用程序1上以某种方式发出互斥信号....

2 个答案:

答案 0 :(得分:1)

在您的服务器应用程序中,尝试使用false作为第一个参数调用构造函数,以便调用线程最初不会拥有互斥锁。

答案 1 :(得分:1)

从拥有线程等待Mutex不会阻塞,并且您指定true为第一个Mutex构造函数arg,这表示它已创建已由当前线程拥有。