【发布时间】:2012-02-06 15:39:54
【问题描述】:
我正在尝试编写一个函数,该函数使用 C 中的 forks 从给定的 int n 递归计算得到的斐波那契数。
函数说明如下: 如果 print 为真,则打印。否则,将其提供给父进程。解决方案应该是递归的,并且它必须为每个调用派生一个新的孩子。每个进程都应该只调用一次 doFib()。方法签名不能更改。不能使用辅助函数。
这是我迄今为止根据我对 fork 的理解所写的内容。我试图分叉两次,这样我就可以产生两个子进程。一个做fib(n-1),一个做fib(n-2)。这样我就可以获取两个结果并将它们组合起来。
static void doFib(int n, int doPrint)
{
pid_t pid1;
pid_t retpid1;
int status1;
pid_t pid2;
pid_t retpid2;
int status2;
pid = fork();
if (pid == 0) // Child Process 1
{
exit(100); // sends 100 to the parent
}
else if (pid > 0) // Parent Process 1
{
pid2 = fork();
if (pid2 == 0) // Child Process 2
{
exit(200); // sends 200 to the parent
}
else if (pid2 > 0) // Parent Process 1
{
}
retpid = waitpid(pid,&status,0);
if (pid != retpid)
{
printf("waitpid error\n");
}
printf("I got this value from my child process 1: %d\n", WEXITSTATUS(status));
}
}
我的问题:
1.如何从两个子进程中获取两个退出值?我知道如何抓住一个(见代码),但我如何抓住他们两个?
2.由于 doFib 不返回值,我如何在我的任何一个子进程中获取我的 doFib 调用的值,以便将它们组合起来?
3.我的分叉是否正确?我对一把叉子很有信心,两把让我头疼。
这是我目前正在为即将到来的考试做准备的一系列练习中期问题。
【问题讨论】:
-
这是作业吗?那么请标记它。
-
其实不是功课。这是我为准备期中考试而自愿解决的一系列问题中的一个问题。他们没有到期或以任何方式上交。
-
+1 以抵消反对票。合理的问题,这不是家庭作业。
-
@Zeychin:非常感谢!不想因为不正当的原因而被否决。 ://
-
这是一个有趣的练习。这是implementation in Python。
标签: c recursion fork fibonacci