
class BufferPool {
AgingQueue waiting = new AgingQueue();
BufferList available = ...
key mutex; int ticket = 0;
BufferList getBuffers(int i) {
lock(mutex); myTicket = ticket++;
while ( (available.size() < i)
(!iAmTheBest(myTicket))) {
waiting.enter(myTicket,mutex, myTicket);
}
BufferList bl = available.get(i);
waiting.ok(myTicket,mutex);
unlock(mutex); return bl;
}
void releaseBuffers(BufferList bl){
lock(mutex);
available.put(bl);
waiting.select(mutex);
unlock(mutex);
}
}