【操作系统】【学习】生产者和消费者问题

问题描述

若干进程通过有限的共享缓冲区交换数据。其中,"生产者"进程不断写入,而"消费者"进程不断读出;共享缓冲区共有N个;任何时刻只能有一个进程可对共享缓冲区进行操作。

 

#define N 100
int count=0;
void producer ( void )
{
    while ( TRUE )
     {
       produce_item ( );
       if (count== N) sleep ( );
       enter_item ( );
       count=count+1;
        if (count==1) wakeup (consumer)
     }
}

 

void consumer( void )
{
    while ( TRUE )
     {
       remove_item ( );
       if (count==0) sleep ( );
       enter_item ( );
       count=count-1;
        if (count==N-1) wakeup (producer )
     }
}


算法摘要

对于生产者:
      只有当缓冲区里为零的时候,这时候消费者才有可能睡觉;
对于消费者:
      只有当缓冲区里装满的时候,这时候生产者才有可能睡觉。

 

 

导致的问题:类Spooler目录问题
      缓冲区为空,消费者检查,得到count=0,但未睡觉的时候,被调度程序挂起,此时它将保留一个局部变量来存储count的值,此时生产者开始工作并向缓冲区内放入资源,当资源等于以后,向消费者发送唤醒信号,而此时消费者没有睡眠,等消费者被恢复以后,检查自己存储过的count,发觉它等于零,则开始睡眠,而生产者则不停生产,当缓冲区满了以后自己也开始睡眠,这时候他们就都处于睡眠状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值