4

だから私は特定のタスクを複数回実行するプログラムに取り組んでいます。すでにスレッドを使用してプログラムを作成しましたが、今ではfork()を使用したプロセスを使用して作成する必要があります。

スレッドでは、指定された数のスレッドを作成し、それらに関数を実行させ(共有メモリ内の変数を変更)、最後に共有メモリ内の最終値を使用したものを実行します。

今は同じことをしたいのですが、fork()を呼び出すたびに本質的に倍増するので、どうすればよいかわかりません。したがって、明らかに、forloopでfork()を呼び出すと、各親プロセスと子プロセスは、独自にfork()を呼び出すループを通過します。

簡単に言うと、フォークを使用して正確な数の子プロセスを作成し(たとえば、5つの子が必要)、これらの5つの実行が完了するまで親プロセスを待機させてから、次に進むにはどうすればよいでしょうか。

助けてくれてありがとう!

4

2 に答える 2

8

私はこれがうまくいくと思います:

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);
于 2013-03-10T22:19:15.853 に答える
1

それぞれが適切な数の子を分岐するようにプロセスを構成することができます (たとえば、親は n 回分岐し、子は n-1、子は n-2 など)、または分岐を制限します。親だけがループを維持します (これが最も単純なケースです)。したがって、子供たちにループを終了させます。

于 2013-03-10T22:50:06.380 に答える