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

2024-05-24

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

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

在子 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;
}   

They are并发运行,但进程几乎在启动后立即结束。换句话说,它们太短而无法真正实现任何重叠。

EDIT:

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

您需要每个进程完成更多的工作。尝试打印超过 50 个。打印超过 10000 个可能就足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在C中同时运行两个子进程? 的相关文章

随机推荐