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:

Nested Class Summary
protected classFIFOReadWriteLock.ReaderSync
protected classFIFOReadWriteLock.WriterSync
Field Summary
protected FIFOSemaphoreentryLock
Fair Semaphore serving as a kind of mutual exclusion lock.
protected intexreaders
Number of threads that have exited read lock.
protected intreaders
Number of threads that have entered read lock.
protected SyncreaderSync
protected SyncwriterSync
Method Summary
protected voidacquireRead()
protected voidacquireWrite()
protected booleanattemptRead(long msecs)
protected booleanattemptWrite(long msecs)
SyncreadLock()
protected voidreleaseRead()
protected voidreleaseWrite()
SyncwriteLock()

Field Detail

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.

readers

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.

readerSync

protected final Sync readerSync

writerSync

protected final Sync writerSync

Method Detail

acquireRead

protected void acquireRead()

acquireWrite

protected void acquireWrite()

attemptRead

protected boolean attemptRead(long msecs)

attemptWrite

protected boolean attemptWrite(long msecs)

readLock

public Sync readLock()

releaseRead

protected void releaseRead()

releaseWrite

protected void releaseWrite()

writeLock

public Sync writeLock()