【问题标题】:Using Mutexes for interprocess synchronisation - getting AME使用互斥锁进行进程间同步 - 获取 AME
【发布时间】:2014-04-17 09:14:11
【问题描述】:

我不明白这种行为:

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 异常。为什么?在第一个进程中终止之前,我确实明确释放了互斥锁。

【问题讨论】:

  • WaitOne 方法阻塞当前线程,直到 Mutex 被释放。因此,在 WaitOne() 之后,你不能再次释放它。

标签: c# mutex interprocess


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2011-08-06
    • 2021-10-10
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多