public class Czytelnia {
private int numberOfReader = 0;
private int numberOfWriters = 0;
private ReadWriteLock RWlock = new ReentrantReadWriteLock(true);
public void readerEnter() {
RWlock.readLock().lock();
try {
numberOfReader++;
} finally {
RWlock.readLock().unlock();
}
}
public void writerEnter() {
RWlock.writeLock().lock();
try {
numberOfWriters++;
} finally {
RWlock.writeLock().unlock();
}
}
public void readerExit() {
RWlock.readLock().lock();
try {
numberOfReader--;
} finally {
RWlock.readLock().unlock();
}
}
public void writerEnter(){
RWlock.writeLock().lock();
try {
numberOfWriters--;
} finally {
RWlock.writeLock().unlock();
}
}
Czy to jest poprawnie napisany problem czytelników i pisarzy?
Zakładamy, że wątek czytelnika działa tak:
readerEnter()/ writerEnter();
czytaj/pisz;
readerExit()/writerEnter();
Chodzi też o to, żeby nie dochodziło do zagłodzeń i żeby była zachowana uczciwość.