Class WriterPreferenceReadWriteLock
- java.lang.Object
-
- com.microstrategy.utils.concurrent.WriterPreferenceReadWriteLock
-
- All Implemented Interfaces:
ReadWriteLock
- Direct Known Subclasses:
ReentrantWriterPreferenceReadWriteLock
public class WriterPreferenceReadWriteLock extends java.lang.Object implements ReadWriteLock
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.
- Since:
- MicroStrategy Web 7.3.1 or earlier
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
WriterPreferenceReadWriteLock.ReaderLock
protected class
WriterPreferenceReadWriteLock.Signaller
Reader and Writer requests are maintained in two different wait sets, by two different objects.protected class
WriterPreferenceReadWriteLock.WriterLock
-
Field Summary
Fields Modifier and Type Field Description protected long
activeReaders_
protected java.lang.Thread
activeWriter_
protected WriterPreferenceReadWriteLock.ReaderLock
readerLock_
protected long
waitingReaders_
protected long
waitingWriters_
protected WriterPreferenceReadWriteLock.WriterLock
writerLock_
-
Constructor Summary
Constructors Constructor Description WriterPreferenceReadWriteLock()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected boolean
allowReader()
Override this method to change to reader preference *protected void
cancelledWaitingReader()
protected void
cancelledWaitingWriter()
protected WriterPreferenceReadWriteLock.Signaller
endRead()
Called upon termination of a read.protected WriterPreferenceReadWriteLock.Signaller
endWrite()
Called upon termination of a write.Sync
readLock()
get the readLock *protected boolean
startRead()
protected boolean
startReadFromNewReader()
protected boolean
startReadFromWaitingReader()
protected boolean
startWrite()
protected boolean
startWriteFromNewWriter()
protected boolean
startWriteFromWaitingWriter()
Sync
writeLock()
get the writeLock *
-
-
-
Field Detail
-
activeReaders_
protected long activeReaders_
-
activeWriter_
protected java.lang.Thread activeWriter_
-
waitingReaders_
protected long waitingReaders_
-
waitingWriters_
protected long waitingWriters_
-
readerLock_
protected final WriterPreferenceReadWriteLock.ReaderLock readerLock_
-
writerLock_
protected final WriterPreferenceReadWriteLock.WriterLock writerLock_
-
-
Method Detail
-
writeLock
public Sync writeLock()
Description copied from interface:ReadWriteLock
get the writeLock *- Specified by:
writeLock
in interfaceReadWriteLock
-
readLock
public Sync readLock()
Description copied from interface:ReadWriteLock
get the readLock *- Specified by:
readLock
in interfaceReadWriteLock
-
cancelledWaitingReader
protected void cancelledWaitingReader()
-
cancelledWaitingWriter
protected void cancelledWaitingWriter()
-
allowReader
protected boolean allowReader()
Override this method to change to reader preference *
-
startRead
protected boolean startRead()
-
startWrite
protected boolean startWrite()
-
startReadFromNewReader
protected boolean startReadFromNewReader()
-
startWriteFromNewWriter
protected boolean startWriteFromNewWriter()
-
startReadFromWaitingReader
protected boolean startReadFromWaitingReader()
-
startWriteFromWaitingWriter
protected boolean startWriteFromWaitingWriter()
-
endRead
protected WriterPreferenceReadWriteLock.Signaller endRead()
Called upon termination of a read. Returns the object to signal to wake up a waiter, or null if no such
-
endWrite
protected WriterPreferenceReadWriteLock.Signaller endWrite()
Called upon termination of a write. Returns the object to signal to wake up a waiter, or null if no such
-
-