在继续之前确保其他流程获得Mutex的最佳方法是什么?

时间:2013-07-02 22:33:10

标签: c# multithreading asynchronous mutex

我不确定最好的方式来了解我正在尝试做什么,所以我想我会转到这里寻找想法。

我有N个程序都必须与一个进程通信,ProcA通过内存映射文件。

当我打开N组中的任何程序时,它会检查ProcA是否已打开,如果没有则启动它。这就是问题所在......

当ProcA准备就绪时,我需要能够与产生它的进程进行通信,已经创建了映射内存并且可以开始通信。

我正在考虑使用Mutex来实现这一目标。让产生处理尝试在循环中获取和释放互斥锁,检查它是否是创建者,直到获得互斥锁在其他位置创建的返回。即使这样看起来也有可能存在问题,因为正如我所说,N个程序将立即执行此操作,如果多个正在旋转,获取和释放,他们会看到彼此锁定并认为它是ProcA。

那么,在ProcA表明它开门营业之前,N个流程阻塞的最佳方法是什么?

谢谢!

修改

为了进一步澄清,我尝试让生成ProcA的过程创建内存映射,然后ProcA可以接管。但是我发现我遇到了同样的问题,因为产生过程需要知道何时释放共享内存,如果它在ProcA抓取它之前就已经发布了内存映射。

修改2

我需要在两个进程之间传递指针数据,因此内存映射文件是我唯一的选项,管道,套接字等不适用于此。

1 个答案:

答案 0 :(得分:1)

我认为你应该真正研究IPC with WCF(这是一篇旧文章,但应该给你基础知识),这将比你目前的方法好得多,并用Mutex相互发信号。

但是如果你坚持使用这种方法,你可以创建一个系统范围(Global)或会话范围(命名)Mutex,并简单地做WaitOne / ReleaseMutex。不需要循环,你应该试着远离这种(循环)方法,因为你会不必要地浪费CPU周期,但除非我遗漏了什么,否则不要认为它有很多。