next up previous
Next: Aging Queues Up: Prioridades dinâmicas: ``Aging'' Previous: Pool de buffers

Pool de buffers: solução

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

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

}

}



Osvaldo Sergio F. de Carvalho
Wed Mar 19 14:56:39 EST 1997