我正在学习并发编程,但是我甚至无法让基础部分工作。我有一个名为fork.c的文件,其中包含一个名为main的方法。在这个方法中,我fork两次,创建了子进程1和2。
在子进程1中,我打印字符'A'50次。
在子进程2中,我打印字符'B'50次。
当我运行代码时,输出结果是AAAAA...AAAABBBBBB....BBBBBB,但从未出现过像ABABABABABABAB....这样的结果。事实上,有时我甚至会得到BBBBB....BBBBAAAA....AAAAA的结果。
那么我为什么会遇到这种情况呢?也许我完全错了。
在子进程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;
}
fork
创建一个新的单线程进程。 "并发" 通常指在一个单一进程内进行多线程处理。 - Kerrek SB