- - - - CENAPAD-MGCO

A seguir: 4a. Questao Acima: Cristiano Ligieri Pereira Anterior: 2a Questão


3a. Questao

TicketQueue wq,   /* writers queue */
            rq;   /* readers queue */

Bed         wbed, /* writers bed */
            rbed; /* readers bed */
 
int         nr,   /* number of readers in the critical section */
            nw,   /* number of writers in the critical section */
            nrww; /* number of readers waiting a writer on the writes queue */

Key         mutex;


void requestRead() {
  lock(mutex);
    int myticket = rq.getTicket();
    if (wq.count() > 0) {
      nrww++;
      wait(rbed, mutex);
    }
    while (nw > 0 || ! rq.isTheBest(myticket))
      wait(rbed, mutex);
    nr++;
    rq.ok(myticket);
  unlock(mutex);
}

void requestWrite() {
  lock(mutex);
    int myticket = rw.getTicket()
    while ((nr + nw + nrww) > 0 || ! wq.isTheBest(myticket))
      wait(wbed, mutex);
    nw++;
    wq.ok(myticket);
  unlock(mutex);
}

void releaseRead() {
  lock(mutex);
    nr--;
    if (nrww > 0) {
      nrww--;
      wakeup(rbed, mutex);
    }
    else if (rw.count() > 0)
      wakeup(wbed, mutex);
    else 
      wakeup(rbed, mutex);
  unlock(mutex);
}

void releaseWrite() {
  lock(mutex);
    nw--;
    if (nrww > 0) {
      nrww--;
      wakeup(rbed, mutex);
    }
    else if (rw.count() > 0)
      wakeup(wbed, mutex);
    else 
      wakeup(rbed, mutex);
  unlock(mutex);
}

OBS: A implementacao da fila de tickets eh identica a implementacao da fila de tickets da questao anterior. Devemos apenas assumir que cada instancia da fila possue variaveis locais "ticket" e "q".

possui

A solucao nao esta sujeita a starvation devido ao uso de uma fila de tickets que garante a todos processo ganho do recurso em um tempo finito, nao permitindo assim que processos leitores conspirem contra processos escritores ou vice-versa. Alem disso, quando um processo escritor entra na fila de espera, nenhum outro processo leitor podera ganhar o recurso ate que o mesmo seja atendido e saia da secao critica.



Osvaldo Carvalho - Postscript - Comentários?