获得C程序的不同输出?该程序应该输出什么?

时间:2017-02-20 21:55:19

标签: c++ c linux fork

我正在尝试获取此程序的输出,但它似乎有所不同,具体取决于我运行它的环境。

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);
}

1 个答案:

答案 0 :(得分:0)

操作系统的调度程序能够以任何所需的顺序运行进程,因此无法保证语句的执行顺序。现代操作系统上的良好调度算法将考虑许多因素,例如作为IO绑定过程是如何以及它使用了多少执行时间 - 并且抢占式上下文切换可能每秒发生~60次。我们无法准确确定这些因素将如何发挥作用,因为我们的流程可能与系统上的数百个其他流程一起运行,因此这些语句没有正确的顺序。