我正在尝试获取该程序的输出,但它似乎根据我运行它的环境而有所不同。
是ABCADEABC或ABCABCADE或ABCADE或EABCDBC或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 次。我们无法准确确定这些因素将如何发挥作用,因为我们的进程可能与系统上数百个其他进程一起运行,因此这些语句没有正确的顺序。
关于c++ - C 程序获得不同的输出?这个程序应该输出什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42354930/