Package com.intellij.util.concurrency
Class WriterPreferenceReadWriteLock
- java.lang.Object
-
- com.intellij.util.concurrency.WriterPreferenceReadWriteLock
-
- All Implemented Interfaces:
ReadWriteLock
- Direct Known Subclasses:
ReentrantWriterPreferenceReadWriteLock
public class WriterPreferenceReadWriteLock extends 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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classWriterPreferenceReadWriteLock.ReaderLockprotected static classWriterPreferenceReadWriteLock.SignallerReader and Writer requests are maintained in two different wait sets, by two different objects.protected classWriterPreferenceReadWriteLock.WriterLock
-
Field Summary
Fields Modifier and Type Field Description protected longactiveReaders_protected ThreadactiveWriter_protected WriterPreferenceReadWriteLock.ReaderLockreaderLock_protected longwaitingReaders_protected longwaitingWriters_protected WriterPreferenceReadWriteLock.WriterLockwriterLock_
-
Constructor Summary
Constructors Constructor Description WriterPreferenceReadWriteLock()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected booleanallowReader()Override this method to change to reader preferenceprotected voidcancelledWaitingReader()protected voidcancelledWaitingWriter()protected WriterPreferenceReadWriteLock.SignallerendRead()Called upon termination of a read.protected WriterPreferenceReadWriteLock.SignallerendWrite()Called upon termination of a write.SyncreadLock()get the readLockprotected booleanstartRead()protected booleanstartReadFromNewReader()protected booleanstartReadFromWaitingReader()protected booleanstartWrite()protected booleanstartWriteFromNewWriter()protected booleanstartWriteFromWaitingWriter()SyncwriteLock()get the writeLock
-
-
-
Field Detail
-
activeReaders_
protected long activeReaders_
-
activeWriter_
protected 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:ReadWriteLockget the writeLock- Specified by:
writeLockin interfaceReadWriteLock
-
readLock
public Sync readLock()
Description copied from interface:ReadWriteLockget the readLock- Specified by:
readLockin 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
-
-