next up previous
Next: Pool de Recursos: comentários Up: Pool de recursos idênticos Previous: Pool de recursos idênticos

Pool de recursos: solução para clientes que pedem diversos recursos

 
ResourcePool pool;

...

myResource = pool.getResource();

/* use myResource */

pool.releaseResource(myResource);

...

class ResourcePool {

Queue available = new Queue();

TicketQueue waiting = new Queue();

ResourceList getResource(int nr) {

lock(mutex);

int myTicket = ticket++;

while ( available.size() < nr ) tex2html_wrap_inline3824

(!waiting.iAmTheBest(myTicket)) ) {

waiting.enter(myTicket, mutex);

}

ResourceList rl = available.getList(nr);

waiting.ok(myTicket);

unlock(mutex);

return rl;

}

void releaseResource(ResourceList rl) {

lock(mutex);

available.put(rl);

waiting.select(mutex);

unlock(mutex);

}

}



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