使用互斥锁进行进程间同步 - 获取AME

时间:2014-04-17 09:14:11

标签: c# mutex interprocess

我不明白这种行为:

static Mutex Mut;

    static void Main(string[] args)
    {
        try
        {
            Mut = System.Threading.Mutex.OpenExisting("testmut");
        }
        catch
        {
            Mut = new Mutex(true, "testmut");
        }

        Mut.WaitOne();

        Thread.Sleep(4000);

        Mut.ReleaseMutex();
    }

同时启动此应用程序的两个实例将导致第二个应用程序在第一个进程终止后获得Abandoned Mutex Exception。为什么?我在第一个进程中终止之前明确释放了互斥锁。

1 个答案:

答案 0 :(得分:0)

好的,问题很简单。我实际上在第一个过程中获得了两次Mutex所有权,首先调用Mut = new Mutex(true, "testmut");(真正的标志授予Mutex的调用者所有权),然后执行WaitOne().显然,因为我只将其释放一次最后,我得到了AM Exception。