2017-02-20 229 views
-4

我想獲得這個程序的輸出,但它似乎有所不同,這取決於我運行它的環境。獲取不同的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); 
} 
+3

請將代碼作爲可複製/粘貼的文本進行編譯和運行。發佈顯示問題的[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。清楚輸入,預期輸出和實際輸出。我們所有的是一個圖像鏈接和一些ABC華夫餅。陳述環境,在其中工作/不工作。 –

+0

在文本中發佈代碼,而不是圖像。剪切並粘貼問題中的代碼,並通過選擇並縮進它並鍵入Alt-K – chqrlie

+0

修復它希望 – Kyle

回答

0

操作系統的調度程序能夠運行在它想要的任何順序的過程,所以也不能保證其訂購的語句將被執行。一個現代操作系統上一個好的調度算法會考慮許多因素,例如IO進程如何限制進程以及它使用的執行時間有多少 - 搶先進行的上下文切換可能發生在每秒約60次。我們無法確定這些因素究竟會如何發揮出來,因爲我們的流程可能會與系統上的其他數百個流程一起運行,所以沒有正確的聲明順序。