1. 程式人生 > >作業系統:生產者-消費者問題

作業系統:生產者-消費者問題

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 )

...