next up previous
Next: Fila com tickets Up: Buffer equânime Previous: Buffer equânime: solução

Buffer equânime: o buffer

 
class Buffer {

char buf[10]; int n=0, p=0, c=0;

int ticket = 0;

TicketQueue prodQ, consQ;

key mutex;

void put(char x) {

lock(mutex);

int myTicket = ticket++;

while ((n geq 10) tex2html_wrap_inline3824 (!prodQ.iAmTheBest(myTicket))) {

prodQ.enter(myTicket,mutex);

}

buf[p] = x; p = (p+1) % 10; n++;

consQ.select();

prodQ.ok(myTicket)

unlock(mutex);

}

char get() {

lock(mutex);

int myTicket = ticket++;

while((n tex2html_wrap_inline3786 0) tex2html_wrap_inline3824 (!consQ.iAmTheBest(myTicket))) {

consQ.enter(myTicket,mutex);

}

char x = buf[c]; c = (c+1) % 10; n-;

prodQ.select();

consQ.ok(myTicket);

unlock(mutex);

}



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