gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:04:53 25 4
gpt4 key购买 nike

我有一个旧考试的问题,给定一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com