同步多个进程以同时开始工作

本文关键字:开始 工作 进程 同步 | 更新日期: 2023-09-27 17:51:21

我在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个进程告诉我它们的初始化准备好了"这句话。

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

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

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

谢谢。

同步多个进程以同时开始工作

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

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

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