操作系统:生产者和消费者问题(及伪代码实现)

学习网址
假设缓冲区大小为10,生产者、消费者若干。只要缓冲区池未满,生产者便可以将消息送入缓冲区池,只要缓冲区池未空,消费者便可以从缓冲区中取走一个消息。

  1. items代表缓冲区可使用的资源数,space代表缓冲区可用资源数
  2. mutex表示互斥锁
  3. buf[10]代表缓冲区,内容类型为item
  4. in、out代表第一个资源和最后一个资源(i即in最早产生的资源)
var items=0,sapce=10,mutex=1;
var in=0,out=0;
item buf[10]={NULL};
producer{
    while(true){
        P(space);//等待缓冲区有空闲位置,在使用PV操作时,条件变量需要在互斥锁之前
        P(mutex);//保证在product时不会有其他进程访问缓冲区
        //product
        buf.push(item,in);  //将新资源放到buf[in]位置
        in=(in+1)%10;
        V(mutex);
        V(items);
      }
}

consumer{
   while(true){
    P(items);  //等待缓冲区有资源可以使用
    P(mutex);  //保证在consume时不会有其他线程访问缓冲区
    //consume
    buf.pop(out); //将buf[out]位置的资源取走
    out=(out+1)%10;
    V(mutex);
    V(space);
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值