作業系統:生產者-消費者問題
阿新 • • 發佈:2019-02-09
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時,主要是緩衝空和緩衝滿這兩種狀態使用原來的計算方法無法區分了,只有增加一個輔助的標誌位:追尾指示燈:-)
...