生产者-消费者 计算机操作系统
Varmutex,empty,full:semaphore:=1,n,0;//定义三个信号量
buffer:array[0,...,n-1]ofitem;//定义缓冲池,容量为n
in,out:integer:=0,0;
begin
parbegin
proceducer:begin//生产者
repeat
.
.
.
produceranitemnextp;//生产一个产品
.
.
.
wait(empty);//申请一个空缓冲区
wait(mutex);//申请缓冲池的使用权
buffer(in):=nextp;//将产品放入缓冲池中
in:=(in+1)modn;//下一个空缓冲区地址
signal(mutex);//释放缓冲池使用权
signal(full);//释放一个满缓冲区
untilfalse;
end
consumer:begin
repeat
wait(full);
wait(mutex);
nextc:=buffer(out);
out:=(out+1)modn;
signal(mutex);
signal(empty);
consumertheiteminnextc;
untilfalse;
end
parend
end