質問

2つの名前付きミューテックスを使って相互除外を達成する方法は?次のコードは機能する必要がありますが、

    [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を使用すると、同じ名前を参照する2つのミューテックスハンドルがあることを確認しました。この仕事をするべきです...私は何がありませんか?

役に立ちましたか?

解決

msdn

ミューテックスを所有するスレッドは、実行をブロックせずに繰り返しの呼び出しで同じミューテックスを要求することができます。

これはこれを検証するためのテストです(テストは完了しません):

        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();
        }
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top