请考虑以下代码:
private static void TestMutex()
{
var m = new Mutex(false, "TestYecMutex");
m.WaitOne();
Console.WriteLine("Here. Press key");
Console.ReadKey();
m.ReleaseMutex();
Console.WriteLine("Released\n\n");
m = new Mutex(false, "TestYecMutex");
m.WaitOne();
Console.WriteLine("Here. Press key");
Console.ReadKey();
m.ReleaseMutex();
Console.WriteLine("Released");
}
它获取一个命名的互斥锁,释放它,再次获取它并再次释放
我使用上面的代码运行3个进程实例,例如p1,p2& p3(这也是我运行它们的顺序)
我希望按下p1窗口,p2将获得锁定,按下p2后,p3接下来获取它,按下p3后返回p1。然而,p1获得,点击,p1释放并获得p2,点击p2,p1(!!!)获得锁定(不是预期的p3)。
是不是还有一堆谁又下一个呢?我也试过一个1的信号量,结果相同。
有什么想法吗?
答案 0 :(得分:0)
您无法保证/预测哪个线程接下来会获得Mutex
,任何一个(但只有一个)流程都可以获得它。