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

Posted

技术标签:

【中文标题】使用互斥锁进行进程间同步 - 获取 AME【英文标题】:Using Mutexes for interprocess synchronisation - getting 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() 之后,你不能再次释放它。 【参考方案1】:

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

【讨论】:

以上是关于使用互斥锁进行进程间同步 - 获取 AME的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程间通信(互斥锁、条件变量、读写锁、文件锁、信号灯)

信号量与进程/线程间同步与互斥

python并发编程之多进程:互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

进程互斥锁--二值信号量

嵌入式开发之hi3519---进程线程间的同步和互斥,条件变量信号了互斥锁等

任意进程的python进程间互斥锁