Class FIFOReadWriteLock

java.lang.Object
EDU.oswego.cs.dl.util.concurrent.FIFOReadWriteLock
All Implemented Interfaces:
ReadWriteLock

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:
  • Field Details

    • 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).
    • 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.
    • 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
    • writerSync

      protected final Sync writerSync
  • Constructor Details

    • FIFOReadWriteLock

      public FIFOReadWriteLock()
  • Method Details