com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock Class Reference

Collaboration diagram for com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock:
Collaboration graph
[legend]

List of all members.

Classes

class  ReaderLock
class  Signaller
interface  Sync
class  WriterLock

Public Member Functions

Sync writeLock ()
Sync readLock ()

Protected Member Functions

synchronized void cancelledWaitingReader ()
synchronized void cancelledWaitingWriter ()
boolean allowReader ()
synchronized boolean startRead ()
synchronized boolean startWrite ()
synchronized boolean startReadFromNewReader ()
synchronized boolean startWriteFromNewWriter ()
synchronized boolean startReadFromWaitingReader ()
synchronized boolean startWriteFromWaitingWriter ()
synchronized Signaller endRead ()
synchronized Signaller endWrite ()

Protected Attributes

long activeReaders_ = 0
Thread activeWriter_ = null
long waitingReaders_ = 0
long waitingWriters_ = 0
final ReaderLock readerLock_ = new ReaderLock()
final WriterLock writerLock_ = new WriterLock()

Detailed Description

A ReadWriteLock that prefers waiting writers over waiting readers when there is contention. This class is adapted from the versions described in CPJ, improving on the ones there a bit by segregating reader and writer wait queues, which is typically more efficient.

The locks are NOT reentrant. In particular, even though it may appear to usually work OK, a thread holding a read lock should not attempt to re-acquire it. Doing so risks lockouts when there are also waiting writers.

[Introduction to this package. ]


Member Function Documentation

boolean com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::allowReader (  )  [inline, protected]

References activeWriter_.

Referenced by endWrite(), and startRead().

synchronized void com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::cancelledWaitingReader (  )  [inline, protected]
synchronized void com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::cancelledWaitingWriter (  )  [inline, protected]
synchronized Signaller com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::endRead (  )  [inline, protected]

Called upon termination of a read. Returns the object to signal to wake up a waiter, or null if no such

References activeReaders_, waitingWriters_, and writerLock_.

Referenced by com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::ReaderLock::unlock().

synchronized Signaller com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::endWrite (  )  [inline, protected]

Called upon termination of a write. Returns the object to signal to wake up a waiter, or null if no such

References activeWriter_, allowReader(), readerLock_, waitingReaders_, waitingWriters_, and writerLock_.

Referenced by com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::WriterLock::unlock().

Sync com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::readLock (  )  [inline]
synchronized boolean com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::startRead (  )  [inline, protected]
synchronized boolean com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::startReadFromNewReader (  )  [inline, protected]
synchronized boolean com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::startReadFromWaitingReader (  )  [inline, protected]
synchronized boolean com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::startWrite (  )  [inline, protected]
synchronized boolean com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::startWriteFromNewWriter (  )  [inline, protected]
synchronized boolean com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::startWriteFromWaitingWriter (  )  [inline, protected]
Sync com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::writeLock (  )  [inline]

Member Data Documentation

Referenced by endRead(), startRead(), and startWrite().

Referenced by allowReader(), endWrite(), and startWrite().


The documentation for this class was generated from the following file:

Generated by  doxygen 1.6.2