获取不同的C程序输出?这个程序输出什么?
问题描述:
我想获得这个程序的输出,但它似乎有所不同,这取决于我运行它的环境。获取不同的C程序输出?这个程序输出什么?
Is is ABCADEABC or ABCABCADE or ABCADE or EABCDBC or EABCCD?
我相信我应该得到ABCABCADE,但我想知道为什么我得到不同的结果,当他们是相同的代码?
我应该得到什么?
#include <stdio.h>
#include <unistd.h>
#include <wait.h>
int main(void) {
int pid;
pid= fork();
if (pid == 0) {
fprintf(stdout, "A\n");
pid= fork();
if (pid==0) {
fprintf(stdout, "B\n");
pid=fork();
fprintf(stdout, "C\n");
}
else {
wait(NULL);
fprintf(stdout, "D\n");
}
}
else {
fprintf(stdout, "E\n");
wait(NULL);
}
// your code goes here
return(0);
}
答
操作系统的调度程序能够运行在它想要的任何顺序的过程,所以也不能保证其订购的语句将被执行。一个现代操作系统上一个好的调度算法会考虑许多因素,例如IO进程如何限制进程以及它使用的执行时间有多少 - 抢先进行的上下文切换可能发生在每秒约60次。我们无法确定这些因素究竟会如何发挥出来,因为我们的流程可能会与系统上的其他数百个流程一起运行,所以没有正确的声明顺序。
请将代码作为可复制/粘贴的文本进行编译和运行。发布显示问题的[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。清楚输入,预期输出和实际输出。我们所有的是一个图像链接和一些ABC华夫饼。陈述环境,在其中工作/不工作。 –
在文本中发布代码,而不是图像。剪切并粘贴问题中的代码,并通过选择并缩进它并键入Alt-K – chqrlie
修复它希望 – Kyle