操作系统:生产者-消费者问题

Producer - Consumer Problem

--(about process cooperation)

 

data description:

buffer[ ]   生产者和消费者的共享缓冲队列;

BUF_SIZE  缓冲队列的全部可用长度;

in           生产者的下一个产品的铺位;(要求为空)

out        消费者的下一次消费的铺位;(要求非空)

sign   用于标识下述两种状态:生产者铺位是否向前绕到了消费者尾部和消费者是否追赶到生产者尾部,追尾即为1,否则为0;

intial state:

in = out = 0;

buffer = (ProductionType *)malloc( BUF_SIZE * sizeof(ProductionType) );

producer process:
consumer process:
ProductionType consume(  void  )
{
  ProductionType temp;
  
while!sign ) ;  //hang on
  temp = buffer[out];  //data copy cost...
  if( (out+1)%BUF_SIZE == in )
    sign 
= ! sign;
  out 
= (out+1)%BUF_SIZE;
  
return temp;
}

  一般使用BUF_SIZE-1个缓冲空间的算法是最简单的,进程协作状态完全可以通过二者的铺位计算出来;当共享的缓冲区扩大到BUF_SIZE时,主要是缓冲空和缓冲满这两种状态使用原来的计算方法无法区分了,只有增加一个辅助的标志位:追尾指示灯:-)

  不知道这种办法用硬件的方法实现起来会有怎样的变数。终究来说,这样的开销争执好像没什么意义,我又没有听Tanenbaum的话了。。。。。
Product( ProductionType ToFeedIn )

...
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值