关于并发的一个小例子,求解释
- C/C++ code
#include<stdio.h>#include<unistd.h>void producer(){ printf("son \n"); while(1){ }}void consumer(){ printf("father"); while(1){ }}int main(void){ pid_t pid; pid = fork(); if(pid == 0){ printf("father 1\n"); consumer(); }else{ printf("son 1\n"); producer(); } return 0;}如上
结果是
son 1
son
father 1
好像没有运行consumer(),十分不解
[解决办法]
死循环不是阻塞,会占用cpu时间
但你的原因是没有flush导致的
换成printf("father\n");
[解决办法]
consumer没有打\n
所以标准输出没有刷新
[解决办法]
1、你理解的是对的
2、没打印出来不是因为没有运行 consumer,是因为输出缓冲未刷新
你可以试下在 printf("father"); 后面加一句 fflush(stdout);
也可以试下把 printf("father"); 改成 printf("father\n");