我正在尝试解决一个关于模拟一个有一个雇员(父流程)和多个客户(子流程)的商店的学校问题。我简化了以下代码,以突出显示在测试时遇到的问题:
#define N_CUSTOMERS 10
void employee() {
}
void customer(int id) {
exit(0);
}
int main() {
printf("working!");
// create customers
for(int i = 0; i < N_CUSTOMERS; i++)
if(!fork())
customer(i);
// be employee
employee();
// end
exit(0);
}
输出是(使用编译gcc -Wall -pthread store.c -o store
):
工作工作工作工作工作工作工作工作工作工作工作工作
我希望printf
只能由父进程执行一次,但是,似乎为每个子进程创建了打印件。
我在这里想念什么?
printf
使用行缓冲输出。由于打印的字符串没有'\n'
,所以之前没有打印fork()
。在exit()
缓冲区上被刷新,并且这发生在父代和所有子代中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句