linux内核缓冲区设置,为什么生产者/消费者问题要设置两个缓冲区?一个不够吗?...

我直观的理解,就像是一个流水线,一边是生产者,负责放入货物;一边是消费者,负责取走货物。那么“流水线”对应coding层面的一个缓冲区,那么是不是一个缓冲区就够了?

但是,一般操作系统的课本和习题上面,描述的生产者/消费者算法,总是用两个缓冲(一个满缓冲区,一个空缓冲区)来做这件事情,像下面这样:

Semaphore full=0;//满缓冲区数目

Semaphore empty=n;//空缓冲区数目

Semaphore mutext=1;//对有界缓冲区进行操作的互斥信号量

Producer(){

while(true){

Produce an item

P(empty);//申请一个空缓冲区

P(mutex);//申请使用缓冲池

将产品放入缓冲区

V(mutex);//释放信号量

V(full);//增加一个满缓冲区

}

}

Consumer(){

while(true){

P(full);//申请一个满缓冲区

P(mutex);//申请使用缓冲池

取出产品

V(mutex);

V(empty);//增加一个空缓冲区

Consume the item

}

}

我的想法是,能否把full和empty这两个缓冲区合并成一个pipeline来表示?这样做会有什么不好的后果吗?

谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值