【发布时间】:2011-09-20 01:45:48
【问题描述】:
所以我开始学习并发编程,但由于某种原因,我什至无法掌握基本知识。我有一个名为 fork.c 的文件,其中包含一个方法 main。在这个方法中,我分叉了两次,进入子进程 1 和 2。
在孩子 1 中,我打印了 50 次字符“A”。
在孩子 2 中,我打印了 50 次字符“B”。
当我运行我的代码时,我得到输出 AAAA...AAAABBBBBB....BBBBBB。但是从来没有像 ABABABABABABAB 这样的东西....事实上,有时我什至会得到 BBBBB....BBBBAAAA....AAAA。
那么为什么我会遇到这种行为?也许我完全错了。
#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可能不是大多数人在说“并发编程”时所想到的...... -
为什么?抱歉,对此很陌生。
-
fork创建一个新的单线程进程。 “并发”通常是指单个进程内的多线程。 -
您的进程除了争夺一种资源,即输出设备,什么都不做。那么它们如何同时运行呢?
标签: c concurrency parallel-processing