|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|