next up previous
Next: Leitores e escritores: solução Up: Exercício 3 Previous: Exercício 3

Leitores e escritores: solução equânime

 

 
class FairRW {

TicketQueue waiting;

int ticket = 0, nw = 0, nr = 0;

key mutex;

void requestRead() {

lock(mutex);

while((nw > 0) tex2html_wrap_inline3824 (!waiting.iAmTheBest(myTicket))) {

waiting.enter(myTicket, mutex);

}

nr++;

waiting.ok(myTicket);

unlock(mutex);

}

void requestWrite() {

lock(mutex);

while((nw + nr > 0) tex2html_wrap_inline3824

(!waiting.iAmTheBest(myTicket))) {

waiting.enter(myTicket, mutex);

}

nw++;

waiting.ok(myTicket);

unlock(mutex);

}



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