EDU.oswego.cs.dl.util.concurrent
Class FIFOReadWriteLock
java.lang.Object
EDU.oswego.cs.dl.util.concurrent.FIFOReadWriteLock
- ReadWriteLock
public class FIFOReadWriteLock
extends java.lang.Object
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. ]
entryLock
protected final FIFOSemaphore entryLock
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).
exreaders
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.
readerSync
protected final Sync readerSync
readers
protected 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.
writerSync
protected final Sync writerSync
acquireRead
protected void acquireRead()
throws InterruptedException
acquireWrite
protected void acquireWrite()
throws InterruptedException
attemptRead
protected boolean attemptRead(long msecs)
throws InterruptedException
attemptWrite
protected boolean attemptWrite(long msecs)
throws InterruptedException
releaseRead
protected void releaseRead()
releaseWrite
protected void releaseWrite()