
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() |
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. ]
| 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] |
References readerLock_.
Referenced by com::cosylab::acs::maci::manager::ManagerImpl::internalDeactivateComponent(), com::cosylab::acs::maci::manager::ManagerImpl::internalReleaseComponent(), com::cosylab::acs::maci::manager::ManagerImpl::internalRequestComponent(), and com::cosylab::acs::maci::manager::ManagerImpl::internalRestartComponent().
| synchronized boolean com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::startRead | ( | ) | [inline, protected] |
References activeReaders_, and allowReader().
Referenced by com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::ReaderLock::attempt(), startReadFromNewReader(), and startReadFromWaitingReader().
| 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] |
References activeReaders_, and activeWriter_.
Referenced by com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::WriterLock::attempt(), startWriteFromNewWriter(), and startWriteFromWaitingWriter().
| 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] |
long com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::activeReaders_ = 0 [protected] |
Referenced by endRead(), startRead(), and startWrite().
Thread com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::activeWriter_ = null [protected] |
Referenced by allowReader(), endWrite(), and startWrite().
final ReaderLock com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::readerLock_ = new ReaderLock() [protected] |
long com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::waitingReaders_ = 0 [protected] |
Referenced by cancelledWaitingReader(), endWrite(), startReadFromNewReader(), and startReadFromWaitingReader().
long com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::waitingWriters_ = 0 [protected] |
Referenced by cancelledWaitingWriter(), endRead(), endWrite(), startWriteFromNewWriter(), and startWriteFromWaitingWriter().
final WriterLock com::cosylab::acs::maci::manager::ReaderPreferenceReadWriteLock::writerLock_ = new WriterLock() [protected] |
1.6.2