
class BTreeConcurrencyController {
int nww = 0, nwr = 0, nr = 0, ticket = 0;
TicketQueue waiting;
key mutex;
void readerRequestRead() {
lock(mutex);
myTicket = ticket++;
while ((nww > 0)
(!waiting.iAmTheBest(myTicket))) {
waiting.enter(myTicket,mutex);
}
nr++;
waiting.ok(myTicket);
unlock(mutex);
}
void writerRequestRead() {
lock(mutex);
myTicket = ticket++;
while ((nww + nwr > 0)
(!waiting.iAmTheBest(myTicket))) {
waiting.enter(myTicket, mutex);
}
nwr++;
waiting.ok(myTicket);
unlock(mutex);
}