Package EDU.oswego.cs.dl.util.concurrent
Class FIFOReadWriteLock
java.lang.Object
EDU.oswego.cs.dl.util.concurrent.FIFOReadWriteLock
- All Implemented Interfaces:
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.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected class
protected class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final FIFOSemaphore
Fair Semaphore serving as a kind of mutual exclusion lock.protected int
Number of threads that have exited read lock.protected int
Number of threads that have entered read lock.protected final Sync
protected final Sync
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
protected void
protected boolean
attemptRead
(long msecs) protected boolean
attemptWrite
(long msecs) readLock()
get the readLockprotected void
protected void
get the writeLock
-
Field Details
-
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). -
readers
protected volatile int readersNumber 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. -
exreaders
protected int exreadersNumber 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
-
writerSync
-
-
Constructor Details
-
FIFOReadWriteLock
public FIFOReadWriteLock()
-
-
Method Details
-
acquireRead
- Throws:
InterruptedException
-
releaseRead
protected void releaseRead() -
acquireWrite
- Throws:
InterruptedException
-
releaseWrite
protected void releaseWrite() -
attemptRead
- Throws:
InterruptedException
-
attemptWrite
- Throws:
InterruptedException
-
writeLock
Description copied from interface:ReadWriteLock
get the writeLock- Specified by:
writeLock
in interfaceReadWriteLock
-
readLock
Description copied from interface:ReadWriteLock
get the readLock- Specified by:
readLock
in interfaceReadWriteLock
-