用管程的方法解决生产者一消费者问题:有若干个生产者和消费者共享一个容量为m的缓冲区。
参考答案:代码如下:
monitor producer_consumer
{
item buffer[m];
int avail_slot; //缓冲区第一个空闲位置
int idx; //产生元素中第一个位置
int used=0; //缓冲区已使用的数量
void produce(item){
if(used<m){
buffer[avail_slot]=item;
used++;
if(used==1)
idx=avail_slot;
avail_slot=(avail_slot+1)%m;
}
}
item consume(){
int tmp=idx;
if (used==0) return NULL;
idx=(idx+1)%m;
used--;
return buffer[tmp];
}
void init(){//初始化
avail_slot=idx=used=0;
}