- - - - CENAPAD-MGCO

contents index A seguir: TicketQueue Acima: Propriedades de programas paralelos Anterior: Starvation


Leitores e Escritores: Solução Justa

  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);
}



Osvaldo Carvalho - Postscript - Comentários?