gpt4 book ai didi

c - C 中的 forks - 练习

转载 作者:太空狗 更新时间:2023-10-29 16:34:07 25 4
gpt4 key购买 nike

在 C 的丛林中用 fork 砍树时,我尝试重复并学习更高级的用法和选项。但是我愚蠢地找到了一个应该非常简单的示例,因为我之前使用过 fork 甚至编写了一些代码,但是我无法完全理解它。

来了:

main() {
if (fork() == 0) {
if (fork() == 0) {
printf("3");
}
else if ((wait(NULL)) > 0) {
printf("2");
}
}
else {
if (fork() == 0) {
printf("1");
exit(0);
}
if (fork() == 0) {
printf("4");
}
}
printf("0");
return 0;
}

可能的解决方案是:

  1. 3201040
  2. 3104200
  3. 1040302
  4. 4321000
  5. 4030201
  6. 1403020

其中 2、5 和 6 是正确答案。

首先,输出中不应该有四个零吗?第二......一个人如何找到解决方案?在纸上做了将近一个小时,我什至不明白为什么给定的解决方案比错误的解决方案更正确(nr3 除外,因为它不能以 2 结尾,因为 0 必须跟在后面)。

有谁拿过他的 fork 可以提供一些好的解释吗?

编辑:

找到这个 here看看 2009 年的 pdf。人们现在可以停止发布关于这是家庭作业的帖子并真正尝试提供帮助吗?如果没有,请找一些其他的话题来消磨时间。谢谢!

最佳答案

我认为应该有 4 个零,这就是我在运行您的代码时看到的...

分析这个问题的一个好方法是画一个像这样的图 - 我将 fork 显示为 *,父进程水平继续,子进程在下面,这样每个单独的进程都是在单独的一行上:

----*----*----*----0----exit (return from main)
| | |
| | +----4----0----exit (return from main)
| |
| +----1----exit (explicitly)
|
+-----*----wait----2----0----exit (return from main)
|
+----3----0----exit (return from main)

现在很容易看出,由于 wait(),您一定会看到 3 稍后是 0,< em>在看到 2 后跟 0

关于c - C 中的 forks - 练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2493821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com