2013-05-14 69 views
0

我有一些創建過程。每個兒子都必須創造兩個兒子。我使用了一個遞歸解決方案,它可以工作,但創建的進程數量並不是我想要的。如何製作「二進制樹」?

這是我的嘗試:

void generate_kid(int g, int res){ 
    pid_t kid1, kid2; 
    int status1, status2; 
    if(res > 0){ 
    if(kid1 = fork()){ 
     if(res > 0){ 
     if(kid2 = fork()){ 
     } 
     else { 
      printf("I am %d, my father is %d\n",getpid(),getppid()); 
      generate_kid(g,res/2-1); 
     } 
     } 
    } 
    else { 
     printf("I am %d, my father is %d\n",getpid(),getppid()); 
     generate_kid(g,res/2-1); 
    } 
    } 
    waitpid(kid1,&status1,0); 
    waitpid(kid2,&status2,0); 
} 
+2

顯示你試過,有人會盡力幫助你的。我們不在這裏爲你寫代碼。 – Barmar 2013-05-14 18:08:32

+0

對不起!這是我的第一個問題! – 2013-05-14 18:18:53

+1

你期望創建多少個進程,而你又有多少進程? – Barmar 2013-05-14 19:49:44

回答

1

試試這個:

void generate_kid(int res){ 
    pid_t kid1, kid2; 
    int status1, status2; 

    if(res > 0){ 
    if ((kid1 = fork()) == 0) { 
     // child 
     printf("I am %d, my father is %d\n",getpid(),getppid()); 
     // generate half remaining rounded up for odd processes 
     generate_kid((res-1)/2); 
    } 
    else if (kid1 > 0) { 
     // parent - create second child 
     if(res > 1){ 
     if ((kid2 = fork()) == 0) { 
      // child 2 
      printf("I am %d, my father is %d\n",getpid(),getppid()); 
      // generate half remaining processes 
      generate_kid((res-2)/2); 
     } 
     else if (kid2 > 0){ 
      // parent 2 
      waitpid(kid2,&status2,0); 
     } 
     } 
     waitpid(kid1,&status1,0); 
    } 
    } 
}