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