0

这是一个非常基本的问题。父进程将创建一些共享内存,将两个整数放入其中,然后分叉一个子进程,该子进程将转到共享内存并计算它们的总和。这一切都很好,但是孩子如何通知父母它已经完成计算总和?我是否需要在两个进程之间创建一个管道来执行此操作?或 waitpid() 足以实现这一目标?

谢谢!

4

3 回答 3

3

如果孩子在写完总和后退出,那么waitpid()就足够了。否则,您需要一些 IPC(互斥量/信号量/管道)来表示完成。

于 2013-01-21T21:26:20.763 回答
0

waitpid()为此目的应该没问题。只需 fork 并在父级中执行waitpid(),在子级中计算相同的共享内存位置,然后返回并waitpid()解除阻塞,父级可以使用该总和做任何它想做的事情。

于 2013-01-21T21:26:22.347 回答
0

如果在计算整数的总和后不再需要您的子进程,它可以从 main 返回总和,并且父进程可以使用 waitpid 检索结果。在这种情况下,孩子看起来像这样:

子进程:

int main(int argc, char** argv) {
    int a,b;
    /* read integers a and b from shared memory */

    /* return sum */
    return a + b;
}

如果子进程还需要为父进程做进一步的工作,在子进程和父进程之间建立一个管道,或者安排一些其他形式的 IPC 来回传递信息。

于 2013-01-21T21:30:01.723 回答