A seguir: Árvores-B: Solução (cont) Acima: Aula 7 - Exercícios Anterior: Transações
A applet abaixo deveria ilustrar o comportamento de uma solução em Java para este problema, incluindo ainda a técnica de aging . Não sei por qual razão o Netscape 3.1 não implementa interrupt() como o appletviewer do JDK, e a applet se bloqueia.
Fontes:
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);
}