begin
buffer:array[0r-1]: integer
in,out:integer=0,0;
empty=r,full=0,mutex=1:semaphore;
cobegin
process Producer-i(i=1,2m)
begin
L1:生产一件物品;
wait(empty)
wait(mutex)
buffer[in] = product;
in = (in+1)mod r;
signal(mutex)
signal(full)
goto L1;
end
process Consumer-j(j=1,2n)
begin
L2: wait(full)
wait(mutex)
take a product from buffer[out];
out =(out+1)mod r;
signal(mutex)
signal(empty)
消费一件物品;
goto L2;
end
初值都是1.