gpt4 book ai didi

c - 如何在 C 中同时运行两个子进程?

转载 作者:太空狗 更新时间:2023-10-29 15:51:16 25 4
gpt4 key购买 nike

所以我开始学习并发编程,但出于某种原因,我什至无法掌握工作的基础知识。我有一个名为 fork.c 的文件,其中包含一个方法 main。在这个方法中,我 fork 两次,进入子进程 1 和 2。

在 child 1 中,我打印了字符“A”50 次。

在 child 2 中,我将字符“B”打印了 50 次。

当我运行我的代码时,我得到输出 AAAAA...AAAABBBBBB....BBBBBB。但从来没有像 ABABABABABABAB 这样的东西……事实上,有时我什至会得到 BBBBB……BBBBAAAA……AAAAA。

那么为什么我会遇到这种行为?也许我完全错了。

#include <stdlib.h>
#include <stdio.h>

void my_char(char n) {
write(1, &n, 1);
}

int main() {
int status;
pid_t child1, child2;

if (!(child1 = fork())) {
// first childi
int a;
for (a = 0; a < 50; a++) {
my_char('A');
}
exit(0);
} else if (!(child2 = fork())) {
// second child
int a;
for (a = 0; a < 50; a++) {
my_char('B');
}
exit(0);
} else {
// parent
wait(&child1);
wait(&child2);
my_char('\n');
}

return 0;
}

最佳答案

它们正在并发运行,但进程几乎在启动后立即结束。换句话说,它们太短了,实际上无法真正重叠。

编辑:

启动另一个进程所需的时间比运行它们所需的时间长。因此重叠的机会很小。 (还有缓冲问题,我将忽略)

您需要每个进程做更多的工作。尝试打印 50 个以上。打印 10000 个以上可能就足够了。

关于c - 如何在 C 中同时运行两个子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7479194/

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