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().
1.7.0