class
DBReaderClient
extends DBClientTemplate {
DBReaderClient(DatabaseAccess dba) {
super(dba);
}
boolean
databaseSafe() {
return !dba.writerInDB;
}
void
databaseWait()
throws InterruptedException {
dba.emptyDatabase.pause();
}
void
databaseEnter() {
dba.readersInDB++;
if (dba.noWriterInDB.waiting())
dba.noWriterInDB.resume();
else
dba.mutex.unlock();
}
void
databaseExit() {
assert !dba.writerInDB && (dba.readersInDB > 0);
dba.readersInDB--;
if (dba.emptyDatabase.waiting())
dba.emptyDatabase.resume();
else if (dba.noWriterInDB.waiting())
dba.noWriterInDB.resume();
else
dba.mutex.unlock();
}
}
syntax highlighted by Code2HTML, v. 0.9