2013-08-30 219 views
1

第一次使用C代碼,並與此打。有誰熟悉「forkN」?我已閱讀關於fork的內容,但找不到任何對「N」的引用......要將其放入上下文中,我必須確定下面的代碼中運行了多少個進程。forkN的功能是什麼?

int main(int argc, char* argv[]) { 
    forkN(6); 
} 

void forkN(int count) { 
    if(count > 0) { 
    fork(); 
    forkN(count-1); 
    } 
} 

任何幫助將不勝感激!

+2

這是他們在這裏定義的函數。你不明白什麼? – SLaks

+0

這確實是一個不好的例子。忘記它,並採取下一個。三個月後再回來。出於好奇:你的C班真的從這個開始? – alk

+0

Btw:'int main()'應該返回一個'int'! – alk

回答

4

你必須記住關於fork的事情,它返回兩次,所以使用3我會告訴你分析。

int main(int argc, char* argv[]){ 
    forkN(6) 
} 

void forkN (int count) { 
    if(count > 0) { 
      fork(); 
      //returns twice, once for the parent process, once for the child. 
      forkN(count-1); 
      //Both processes call forkN 
    } 
} 

--main process -- forkN(3) -- if(3 > 0)-- fork() --- forkN(2) -- if(2>0) -- fork().. forkN(1)... 
              |Child       | 
              -------- forkN(2) -- if(2>0) -----|-fork().. 
                       | | 
                       | -------forkN(1).. 
                       |----- forkN(1).. 
enter code here 

正如您所見,它變得複雜。要知道的是每次調用fork()時,2個進程調用forkN(),並且這2個進程中的每一個都創建它們自己的子進程。

+0

謝謝你爲我分解這個。現在更有意義! – IDOntWantThat

0

forkN()功能在您的示例源中定義正確,非常明顯,是否有可能「N」令您感到困惑?答案是「forkN」僅僅是一個本地定義函數的名稱,並且可以很容易地命名爲「repeated_do()」或「countdown_lots_of_times()」。至於確定有多少進程正在運行,您可以看到名爲「forkN()」(或「repeated_do()」或「countdown_lots_of_times()」)的函數遞歸調用fork()。它應該是相當簡單的繪製過程創作和計數(或者你可以只是取冪)。

+0

哇...好吧謝謝你!是的,N把我扔了。 – IDOntWantThat