使用Mutex进行进程间同步-获取AME

本文关键字:同步 获取 AME 进程 Mutex 使用 | 更新日期: 2023-09-27 17:58:48

我不理解这种行为:

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

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

使用Mutex进行进程间同步-获取AME

好吧,问题很简单。实际上,在第一个过程中,我获得了两次Mutex所有权,第一次是调用Mut = new Mutex(true, "testmut");(真正的标志授予调用方Mutex的所有权),然后执行WaitOne().。显然,由于我最后只释放了它一次,所以我得到了一个AM异常。