0

私が行った場合:

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 で何らかの方法でミューテックスにシグナルを送るまで、そのアプリケーションを待機させたいと考えています。

4

2 に答える 2

1

サーバー アプリで、最初のパラメーターとして false を指定してコンストラクターを呼び出してみて、呼び出し元のスレッドが最初にミューテックスを所有しないようにします。

于 2012-08-09T21:39:38.670 に答える
1

所有スレッドからの Mutex の待機はブロックされず、最初の Mutex コンストラクター引数として true を指定しました。これは、現在のスレッドによって既に所有されていることを示します。

于 2012-08-09T21:39:38.670 に答える