生产者-消费者 计算机操作系统

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