首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于并发的一个小例子,求解释,该如何解决

2012-03-31 
关于并发的一个小例子,求解释C/C++ code#includestdio.h#includeunistd.hvoid producer(){printf(son

关于并发的一个小例子,求解释

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");

探讨

引用:

因为你那个死循环可能一直占用cpu。也就是说那个子进程一直在运行罢了。

我一直的理解是在那个死循环中,操作系统会把cpu分给另一个进程

热点排行