
class AgingQueue {
Queue waiting = new Queue();
void enter(int ticket, key k, int initialPriority) {
if((Request rq = waiting.get(ticket))== null) {
Request rq = new Request(ticket, ticket + initialPriority);
* o segundo parametro eh a prioridade inicial */
waiting.put(rq);
}
rq.bed.sleep(k);
}
void select(key k) {
Request rq = waiting.best();
/* best() retorna a requisicao de melhor prioridade */
rq.bed.wakeup(k);
}
void ok(int ticket) {
waiting.delete(ticket);
waiting.getOlder();
/* aqui melhoram as prioridades de todos
os processos em espera */
}
boolean iAmTheBest(int ticket) {
Request rq = waiting.best();
if (rq == null) return true;
return rq.ticket == ticket;
}
}