EDU.oswego.cs.dl.util.concurrent
Class FIFOReadWriteLock
public
class
FIFOReadWriteLock
extends Object
implements ReadWriteLock
This class implements a policy for reader/writer locks in which
threads contend in a First-in/First-out manner for access (modulo
the limitations of FIFOSemaphore, which is used for queuing). This
policy does not particularly favor readers or writers. As a
byproduct of the FIFO policy, the
attempt methods may
return
false even when the lock might logically be
available, but, due to contention, cannot be accessed within the
given time bound.
This lock is NOT reentrant. Current readers and
writers should not try to re-obtain locks while holding them.
[ Introduction to this package. ]
See Also:
Fair Semaphore serving as a kind of mutual exclusion lock.
Writers acquire on entry, and hold until rwlock exit.
Readers acquire and release only during entry (but are
blocked from doing so if there is an active writer).
protected int exreaders
Number of threads that have exited read lock. Note that this is
never reset to zero. Accessed only in code protected by
synchronized(this). When exreaders != readers, the rwlock is
being used for reading. Else if the entry lock is held, it is
being used for writing (or in transition). Else it is free.
Note: To distinguish these states, we assume that fewer than 2^32
reader threads can simultaneously execute.
protected volatile int readers
Number of threads that have entered read lock. Note that this is
never reset to zero. Incremented only during acquisition of read
lock while the "entryLock" is held, but read elsewhere, so is
declared volatile.
protected final
Sync readerSync
protected final
Sync writerSync
protected void acquireRead()
protected void acquireWrite()
protected boolean attemptRead(long msecs)
protected boolean attemptWrite(long msecs)
protected void releaseRead()
protected void releaseWrite()