我尝试在C丛林中用叉子砍伐树木时重复并学习更多高级用途和选项.但是我发现一个非常简单的例子,因为我之前曾使用过叉子甚至编写了一些代码,但我可以'完全理解它.
来了:
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;
}
Run Code Online (Sandbox Code Playgroud)
可能的解决方案是
其中2,5和6是正确的答案.
首先,输出中不应该有四个零吗?第二......一个人如何解决问题?在纸上做了差不多一个小时,我甚至都没有理解为什么给定的解决方案比假的更正确(除了nr3,因为它不能以2结束,因为必须遵循0).
谁检查了他的叉子谁可以提供一些很好的解释?
编辑:
在这里发现这一点从2009年开始看pdf.人们现在可以停止发布关于这个作业的帖子,并且实际上试图提供帮助吗?如果没有,请找一些其他主题来花时间.谢谢 !
Mat*_*ery 10
我认为应该有4个零,这就是我看到的,如果我运行你的代码......
分析这个的一个好方法是画一个像这样的图 - 我已经显示了叉子,就像*
父母水平延续,下面的孩子一样,所以每个单独的过程都在一个单独的行上:
----*----*----*----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)
Run Code Online (Sandbox Code Playgroud)
现在很容易看出,因为这个wait()
,你必须看到3
一段时间之后0
,然后看到2
之后0
.
归档时间: |
|
查看次数: |
2288 次 |
最近记录: |