2013-08-30 52 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