同步多个进程以同时开始工作
本文关键字:开始 工作 进程 同步 | 更新日期: 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
,在具有文件备份的进程之间共享内存。
其他方法包括远程过程调用、套接字和简单的文件映射。