读书人

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

发布时间: 2012-03-31 13:13:26 作者: rapoo

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

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分给另一个进程

读书人网 >C语言

热点推荐