0

我正在使用 C# 中的 .NET 4 工作。我有 LauncherProgram.exe,它将创建 WorkerProgram.exe 的多个实例,让它们对创建进程时提供的参数做一些工作,然后 LauncherProgram.exe 将启动一组新的 WorkerProgram.exe 实例来做一些不同的工作.

每个 WorkerProgram.exe 都会使用一些参数来启动,这些参数告诉它要处理什么,并且可以同时启动一个或多个 WorkerProgram.exe。WorkerProgram.exe 读取提供的参数,执行一些初始化,然后就可以开始工作了。

我想弄清楚的是如何让每组 WorkerProgram.exe 同时启动“告诉”或“信号”或“我无法弄清楚正确的术语”每个进程都有的 LauncherProgram.exe完成初始化步骤并准备开始。我想在一组启动的 WorkerProgram.exe 实例中同步“做你的工作”的开始。

我正在将我的 LauncherProgram.exe 设置为像这样工作(暂时忽略类型):

while (there are sets of work to do)
{
  for each set of work
  {
    for each group data in set
      create and launch a WorkerProgram.exe for a single set of data
    wait for all created WorkerProgram.exe to indicate init is complete
    send signal to start processing 
  }
}

实际上,我有一个小型测试程序,我在其中使用命名事件来指示多个生成的进程同时启动某些东西。

(希望以上所有内容都有意义)

我只是想不通“等待 N 个进程告诉我它们的初始化已准备好”位。

我搜索了“进程同步”和“集合点”,并查看了使用命名事件和命名信号量。我可以找到一堆关于线程的东西,但关于单独的进程却很少。

LauncherProgram.exe 使用 System.Diagnostics.Process 类创建 WorkerProgram.exe 进程,如果有帮助的话。

如果你能给我更好的术语来帮助缩小我的搜索范围,或者给我指出一个设计模式或机制,或者一个有帮助的库或类,我将非常感激。

谢谢。

4

2 回答 2

1

您可以使用System.Threading.Mutex该类进行进程间通信。请参阅http://msdn.microsoft.com/en-us/library/system.threading.mutex(v=vs.110).aspx。命名每个 Mutex 可能是最简单的,将 WorkerProgram.exe 的进程 ID 或其他一些区别特征作为名称。

于 2013-01-11T23:46:46.450 回答
0

您可以使用一些进程间通信,但简单的方法是写入临时文件,例如将 DONE 写入某个文件并让 Launcher 定期读取,直到所有 WorkerProgram 将 DONE 写入各自的文件等......甚至创建一个FileMappingin windows 在具有文件支持的进程之间共享内存。

其他方法包括远程过程调用、套接字和简单文件映射。

于 2013-01-11T23:36:59.313 回答