相互除外は.NETミューテックスクラスを使用していません
-
12-11-2019 - |
質問
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(); }
所属していません StackOverflow