随笔之---基于信号量实现,生产者与消费者模型

Class BoundedBuffer{

  mutex = new Semaphore(1);
  hasBuffer= new Semaphore(n);// 有n个空buffer 用来装数据
  hasData= new Semaphore(0);//记录有数据的buffer个数

}

// 生产者数据c 存到buffer
BoudedBuffer::Deposit(c){

   hasBuffer->P(); //-- 要不要等?有空buffer 才能生产数据,没有就等待, 使用一个buff 就减少-1,
   //保证互斥
   mutex->P();
   add c to the buffer
   mutex-V();

   hasData->V(); //++    数据生产好了要加上,其实是唤醒,另一侧的消费着可能正在阻塞没有可消费的状态

}

//消费者 数据从buffer 中取出
BoudedBuffer::Remove(c){

  hasData->P(); //--  要不要等? 有没有生产好,没有就等待。

  mutex->P();
  remove c from the buffer;
  mutex-V();

  hasBuffer->V(); // ++   buffer 空下来要加上

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值