我有一个旧考试的问题,给定一个 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++;
}
最佳答案
首先要注意的是,分析这个问题是没有阻塞调用,这意味着当主进程到达main末尾时,无论其他进程处于什么状态,程序都会完成。
利用这一事实,我们可以算出 m
的下限:这将是当主进程退出之前 fork 进程不更改 m
的值时。在本例中,m 将从 3 开始,并在循环中添加 4 次,从而得出 m = 7
的下限。
当所有进程在进入循环之前都已生成时,就会出现上限,然后每个进程都会向 m
添加 4(起始值为 3)。换句话说,m = 3 + N*4
,其中 N
是生成的进程总数。
因此,为了最终获得上限,我们需要知道生成了多少个进程。第一次调用 fork()
会将一个进程变成两个,随后调用 fork()
会将每个进程变成两个,这意味着 N = 4
。
使用之前的 m
表达式,我们发现上限为 m = 3 + 4 * 4 = 19
关于c - 为什么这个使用 fork 和共享内存的 C 程序的输出是这样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40103750/