c++ - C 程序获得不同的输出?这个程序应该输出什么?

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

最佳答案

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

关于c++ - C 程序获得不同的输出?这个程序应该输出什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42354930/

相关文章:

c++ - "Undefined Symbols"但函数已定义和声明,没有拼写错误

c++ - Active Accessibility (COM) 调用返回不同,具体取决于调用者是线程还是进程。什么?

linux - initctl 中的作业是什么意思以及如何使用它?

Linux环境变量引用其他变量

python - 从 python C API 调用内置的 'hex'

linux - https ( SSL ) 的 curl 命令

c++ - 启动调试 session 时 MacOS 上的 VSCode LLDB 错误

c++ - 如何在 MSVC++ 2005 或 2008 的大型解决方案中找到重复的 header ?

C++无限和代码挂了?冷冻?我不知道

有人可以解释为什么我需要使用 void *sum_thread(void *data) 原型(prototype)吗?