Monitor boundedbuffer:
buffer: array[0..k-1] of items;
nextin, nextout, count: integer;
notfull, notempty: condition;
append(v):
while (count=k) cwait(notfull);
buffer[nextin]:= v;
nextin:= nextin+1 mod k;
count++;
csignal(notempty);
take(v):
while (count=0) cwait(notempty);
v:= buffer[nextout];
nextout:= nextout+1 mod k;
count--;
csignal(notfull);