为什么这个C程序的输出使用fork和共享内存?

时间:2016-10-18 08:54:34

标签: c process operating-system fork shared-memory

我从旧考试中得到问题,鉴于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++;
}

1 个答案:

答案 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