Var mutex,empty,full:semaphore:=1,n,0;
buffer:array[0,...,n-1]of item;
in,out:integer:=0,0;
begin
parbegin
proceducer:begin
repeat
.
.
.
producer an item nextp;
.
.
.
wait(empty);
wait(mutex);
buffer(in):=nextp;
in:=(in+1)mod n;
signal(mutex);
signal(full);
until false;
end
consumer:begin
repeat
wait(full);
wait(mutex);
nextc:=buffer(out);
out:=(out+1)mod n;
signal(mutex);
signal(empty);
consumer the item in nextc;
until false;
end
parend
end
我尤其不明白nextc是什么类型,只能存放一个元素还是一个队列?还有根据记录型信号量的特点,生产者进程怎么被阻塞怎么被唤醒