-
-
-
CENAPAD-MGCO
A seguir: TicketQueue
Acima: Propriedades de programas paralelos
Anterior: Starvation
Uma técnica simples e poderosa para se impor um comportamento justo é o uso de tickets , como nos bancos ou lojas de reserva de passagens
Ao chegar, um cliente pega um ticket;
Os tickets são numerados sequencialmente, e determinam a ordem de atendimento
Tickets crescem monotonamente, e indefinidamente;
Com um número razoável de bits consegue-se programas que duram séculos.
TicketQueue waiting;
...
void requestWrite() {
lock(mutex);
int myTicket = waiting.getTicket();
while ((nW > 0) || (nR > 0)||(!waiting.isTheBest(rq))) {
wait(b,mutex);
}
nW++;
waiting.ok(myTicket);
unlock(mutex);
}
void requestRead() {
lock(mutex);
int myTicket = waiting.getTicket();
while ((nW > 0) ||(!waiting.isTheBest(myTicket))) {
wait(b,mutex);
}
nR++;
waiting.ok(myTicket);
wakeup(b,mutex);
unlock(mutex);
}
void releaseWrite() {
lock(mutex);
nW--;
wakeup(b,mutex);
unlock(mutex);
}
void releaseRead() {
lock(mutex);
nR--;
wakeup(b,mutex);
unlock(mutex);
}