0

如果我做:

控制台应用程序1:

    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

控制台应用程序2

    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 上以某种方式向互斥锁发出信号...。

4

2 回答 2

1

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

于 2012-08-09T21:39:38.670 回答
1

等待来自拥有线程的 Mutex 不会阻塞,并且您将 true 指定为第一个 Mutex 构造函数 arg,这表明它已被当前线程所拥有。

于 2012-08-09T21:39:38.670 回答