-
-
-
CENAPAD-MGCO
A seguir: Árvores-B: Solução (cont)
Acima: Respostas
Anterior: Transações
class BTreeConcurrencyController {
int nww = 0, nwr = 0, nr = 0;
TicketQueue q;
Bed bed;
Key mutex;
void readerRequestRead() {
lock(mutex);
Ticket myTicket = q.getTicket();
while ((nww > 0) || (!q.isTheBest(myTicket))) {
wait(bed,mutex);
}
nr++;
waiting.ok(myTicket);
wakeup(bed,mutex);
unlock(mutex);
}
void writerRequestRead() {
lock(mutex);
Ticket myTicket = q.getTicket();
while ((nww + nwr > 0) || (!q.isTheBest(myTicket))) {
wait(bed, mutex);
}
nwr++;
waiting.ok(myTicket);
wakeup(bed,mutex);
unlock(mutex);
}