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 | ( | ) | [protected] |
synchronized void com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.cancelledWaitingReader | ( | ) | [protected] |
synchronized void com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.cancelledWaitingWriter | ( | ) | [protected] |
synchronized Signaller com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.endRead | ( | ) | [protected] |
Called upon termination of a read. Returns the object to signal to wake up a waiter, or null if no such
References com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.activeReaders_, com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.waitingWriters_, and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.writerLock_.
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.ReaderLock.unlock().
synchronized Signaller com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.endWrite | ( | ) | [protected] |
Called upon termination of a write. Returns the object to signal to wake up a waiter, or null if no such
References com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.activeWriter_, com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.allowReader(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.readerLock_, com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.waitingReaders_, com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.waitingWriters_, and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.writerLock_.
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.WriterLock.unlock().
Sync com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.readLock | ( | ) |
synchronized boolean com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startRead | ( | ) | [protected] |
References com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.activeReaders_, and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.allowReader().
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.ReaderLock.attempt(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startReadFromNewReader(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startReadFromWaitingReader().
synchronized boolean com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startReadFromNewReader | ( | ) | [protected] |
References com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startRead(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.waitingReaders_.
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.ReaderLock.attempt(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.ReaderLock.lock().
synchronized boolean com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startReadFromWaitingReader | ( | ) | [protected] |
References com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startRead(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.waitingReaders_.
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.ReaderLock.attempt(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.ReaderLock.lock().
synchronized boolean com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startWrite | ( | ) | [protected] |
References com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.activeReaders_, and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.activeWriter_.
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.WriterLock.attempt(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startWriteFromNewWriter(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startWriteFromWaitingWriter().
synchronized boolean com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startWriteFromNewWriter | ( | ) | [protected] |
References com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startWrite(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.waitingWriters_.
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.WriterLock.attempt(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.WriterLock.lock().
synchronized boolean com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startWriteFromWaitingWriter | ( | ) | [protected] |
References com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startWrite(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.waitingWriters_.
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.WriterLock.attempt(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.WriterLock.lock().
Sync com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.writeLock | ( | ) |
long com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.activeReaders_ = 0 [protected] |
Thread com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.activeWriter_ = null [protected] |
final ReaderLock com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.readerLock_ = new ReaderLock() [protected] |
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.WriterLock.attempt(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.endWrite(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.WriterLock.lock(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.readLock().
long com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.waitingReaders_ = 0 [protected] |
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.cancelledWaitingReader(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.endWrite(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startReadFromNewReader(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startReadFromWaitingReader().
long com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.waitingWriters_ = 0 [protected] |
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.cancelledWaitingWriter(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.endRead(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.endWrite(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startWriteFromNewWriter(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.startWriteFromWaitingWriter().
final WriterLock com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.writerLock_ = new WriterLock() [protected] |
Referenced by com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.ReaderLock.attempt(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.endRead(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.endWrite(), com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.ReaderLock.lock(), and com.cosylab.acs.maci.manager.ReaderPreferenceReadWriteLock.writeLock().