2016-09-19 40 views
-2

林學個操作系統,並不能真正掌握這一段代碼:C工藝和分流處理

#include <sys/types.h> 
#include <sys/wait.h> 
#include <unistd.h> 
#include <stdio.h> 

int main() 
{ 
    int pid; 
    int i; 

    pid = fork(); 

    switch(pid) 
    { 
     case -1: 
      perror ("Error \n"); 
      break; 

     case 0: 
      for(i=1; i < 11; i++) 
       printf ("Im the son %d, My father is %d - Loop %d \n", getpid(), getppid(), i); 
      break; 

     default: 
      for(i=1; i < 11; i++) 
       printf ("Im the father %d and my father is %d - Loop %d \n", getpid(), getppid(), i); 

      wait(NULL); 
      printf("End of the father process %d - My son process %d have finished.\n", getpid(), pid); 
      break; 
    } 

} 

我明白,你叉(創建過程的副本),如果一切正常(不同從-1)然後它循環在for十次,然後休息,我不明白的是兒子如何可以回到for,我的意思是如果它是0(兒子)你printf「這是兒子X和我的父親是Y「然後休息。它是如何循環兩次10次?

+0

子進程執行「情況下0:」子句和原始(父)進程執行「默認:」子句。它們都同時運行(儘管代碼執行的順序是未定義的)。 – Mick

+0

謝謝米克,現在它是未定義的,但是什麼給了?我的意思是他們在某個時候結束了(也許混合)。執行系統的任何部分是否優先於其他進程? – user3442470

+0

我其實誤解了你的問題。萊利說得對。 – Mick

回答

2

for()沒有{}只重複執行下一行。

for(i=1; i < 11; i++) 
    printf(); 
break; 

相同

for(i=1; i < 11; i++) { 
    printf(); 
} 
break; 
+0

謝謝賴利,現在我還有一個問題,它是如何混合的?誰比另一個優先於一個進程?有沒有解決這個問題的操作系統中的算法? – user3442470

+0

這兩個進程將被切入和切出CPU。通常情況下,兩者都沒有優先權。操作系統最大的工作之一是決定運行哪個進程。 Google'cpu scheduler'。 – Riley