如何fork()确切数量的孩子

ple*_*ood 3 c children fork

所以我正在开发一个多次执行某项任务的程序.我已经使用线程编写过程序,但现在我需要使用fork()进程.

使用线程,我只需创建指定数量的线程,让它们执行一个函数(更改共享内存中的变量),然后最终执行在共享内存中使用最终值的内容.

然而,现在我想做同样的事情,但我不知道怎么做,因为每次我调用fork()它本质上都是双倍的.很明显,如果我在forloop中调用fork(),那么每个父进程和子进程将通过自己的循环调用fork().

所以我的问题简而言之:如何使用fork创建一个确切数量的子进程(假设我需要5个子进程),并让我的父进程等到这5个进程完成后再继续运行?

谢谢您的帮助!

nic*_*are 6

我认为这会奏效:

int processes = 5;
int i;
for (i = 0; i < processes; ++i) {
    if (fork() == 0) {
        // do the job specific to the child process
        ...
        // don't forget to exit from the child
        exit(0);
    }
}
// wait all child processes
int status;
for (i = 0; i < processes; ++i)
    wait(&status);
Run Code Online (Sandbox Code Playgroud)