0

我不确定最好的方式来了解我正在尝试做的事情,所以我想我会转向这里寻求想法。

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

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

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

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

那么,在 ProcA 发出对业务开放的信号之前,阻止 N 个进程的最佳方法是什么?

谢谢!

编辑

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

编辑 2

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

4

1 回答 1

1

我认为您应该真正使用 WCF 研究 IPC(这是一篇旧文章,但应该为您提供基础知识),这将比您当前的方法和使用 Mutex 相互发送信号要好得多。

但是如果你坚持使用这种方法,你可以创建一个系统范围的(Global)或会话范围的(命名的)互斥体,然后简单地做 WaitOne/ReleaseMutex。不需要循环,您应该尽量远离这种(循环)方法,因为您将不必要地浪费 CPU 周期,但除非我遗漏了什么,否则不要认为它有太多意义。

于 2013-07-02T22:47:48.503 回答