第一次使用 C 代码并被此击中。有人熟悉“ forkN ”吗?我已经阅读了关于 fork 的信息,但找不到对“ N ”的任何引用......为了将其置于上下文中,我必须确定下面的代码中正在运行多少进程。
int main(int argc, char* argv[]) {
forkN(6);
}
void forkN(int count) {
if(count > 0) {
fork();
forkN(count-1);
}
}
任何帮助将不胜感激!
第一次使用 C 代码并被此击中。有人熟悉“ forkN ”吗?我已经阅读了关于 fork 的信息,但找不到对“ N ”的任何引用......为了将其置于上下文中,我必须确定下面的代码中正在运行多少进程。
int main(int argc, char* argv[]) {
forkN(6);
}
void forkN(int count) {
if(count > 0) {
fork();
forkN(count-1);
}
}
任何帮助将不胜感激!
关于 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 个进程调用 into forkN()
,并且这 2 个进程中的每一个都会创建自己的子进程。
该forkN()
函数是在您的示例源代码中定义的,非常明显,“N”是否可能让您感到困惑?答案是“forkN”只是一个本地定义函数的名称,可以很容易地命名为“repeatedly_do()”或“countdown_lots_of_times()”。至于识别有多少进程正在运行,如您所见,名为“forkN()”(或“repeatedly_do()”或“countdown_lots_of_times()”)的函数是fork()
递归调用的。绘制流程创建并计算它们应该相当简单(或者您可以只取幂。)