编了下LINUX多进程编程,遇到了个无法理解的问题,求大神解答 15

是一个关于消费者和生产者的程序当生产者进程一旦结束了,消费者进程就不再执行了,但是我胡乱加点东西让生产者进程继续执行,却可以继续。。。理解不能啊。。。求解代码,如下,如果... 是一个关于消费者和生产者的程序

当生产者进程一旦结束了,消费者进程就不再执行了,但是我胡乱加点东西让生产者进程继续执行,却可以继续。。。理解不能啊。。。求解 代码,如下,如果删除i>26后那段“This is the Candy"是用来让生产者迟点结束的,无意义的,但没这段的话,生产者提前结束,消费者就罢工了。。。。
if( fork() == 0 )
{
for(int i=0; i<29; i++)
{
if(i<26)
{
waitSem(semSetId,1);//获取一个空间用于存放产品
waitSem(semSetId,4);//占有产品缓冲区
produce2(getpid(),(char)('a'+i));
sigSem(semSetId,4);//释放产品缓冲区
sleep(1);//每两秒生产一个
sigSem(semSetId,3);//告知消费者有产品了
}
else
cout<<"This is the Candy!"
}
else
{
for(int i=0; i<26; i++)
{
waitSem(semSetId,3);//必须有产品才能消费
waitSem(semSetId,4);//锁定缓冲区
consume2();//获得产品,需要修改缓冲区
sigSem(semSetId,4);//释放缓冲区
sigSem(semSetId,1);//告知生产者,有空间了
sleep(2);//消费频率

}
}
}

能消费完毕的情况:

失败的情况:

纠结死了。。。。。。。。。求大神解惑。。。。。。。。
展开
 我来答
匿名用户
2015-05-26
展开全部
  •  有可能是Makefile有问题的哦。检查下吧。用的头文件都是内核的头文件。

追问
...不明白啊,我是昨天做作业才开始接触这个的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式