我从旧考试中得到问题,鉴于C代码和m是全局变量,当程序完成m的值时,答案是“7到19之间”,但我不明白为什么,可以有人解释对我来说,为什么答案在7-19之间而不是19之间。
int m = 0;
int main() {
int i;
fork();
m=3;
fork();
for(i=0;i<4;i++)
m++;
}
答案 0 :(得分:1)
首先要注意的是,分析这个问题的是没有阻塞调用,这意味着当主进程到达main的末尾时,程序将完成,无论其他进程处于什么状态。
使用这个事实我们可以计算m
的下限:这将是分叉进程在主进程退出之前不更改m
的值的时候。在这种情况下,m将从3开始,并在循环中添加4次,给出m = 7
的下限。
在进入循环之前生成所有进程,然后每个进程将向m
添加4(其起始值为3)时,将发生上限。换句话说,m = 3 + N*4
其中N
是生成的进程总数。
因此,要最终获得上限,我们需要知道生成了多少进程。 fork()
的第一次调用会将一个过程变为两个,随后调用fork()
会将每个过程变为两个,这意味着N = 4
。
使用我们之前的m
表达式,我们看到上限为m = 3 + 4 * 4 = 19