被命名为Mutex跨流程收购订单

时间:2014-12-23 15:20:39

标签: c# locking mutex named

请考虑以下代码:

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的信号量,结果相同。
有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您无法保证/预测哪个线程接下来会获得Mutex,任何一个(但只有一个)流程都可以获得它。