If a reader holds the lock, all incoming readers are allowed to acquire the lock until a write arrives. A writer must wait for all current readers to release the lock before acquiring it.
When a writer has the lock, everybody else is blocked.
When a writer release the lock, there is a writer priority so if another writer is waiting it will have the lock even if it arrived later than readers. Writers are prioritary against readers but all writers get the lock in a FIFO order.
ReadPrioritaryFIFOWriteLock.java の 44 行で定義されています。
Public メソッド | |
ReadPrioritaryFIFOWriteLock () | |
void | acquireRead () throws InterruptedException |
synchronized void | releaseRead () |
void | acquireWrite () throws InterruptedException |
synchronized void | releaseWrite () |
final synchronized boolean | isReadLocked () |
final synchronized boolean | isWriteLocked () |
Private 変数 | |
int | activeReaders |
boolean | activeWriter |
int | waitingReaders |
int | waitingWriters |
Object | readSync |
ArrayList | writeWaitingQueue |
|
Creates a new 参照先 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.activeReaders, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.activeWriter, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.readSync, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.waitingReaders, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.waitingWriters, と org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.writeWaitingQueue.
|
|
Acquires the lock for a read.
参照先 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.activeReaders, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.activeWriter, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.readSync, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.waitingReaders, と org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.waitingWriters.
|
|
|
Tests if the lock is currently held by at least one reader.
参照先 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.activeReaders.
|
|
Tests if the lock is currently held by a writer.
参照先 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.activeWriter.
|
|
Releases a lock previously acquired for reading. ReadPrioritaryFIFOWriteLock.java の 128 行で定義されています。 参照先 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.activeReaders, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.activeWriter, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.waitingWriters, と org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.writeWaitingQueue.
|
|
Releases a lock previously acquired for writing. ReadPrioritaryFIFOWriteLock.java の 181 行で定義されています。 参照先 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.activeWriter, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.readSync, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.waitingReaders, org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.waitingWriters, と org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.writeWaitingQueue. 参照元 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.acquireWrite(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2ec.disableBackend(), org.objectweb.cjdbc.controller.loadbalancer.raidb1.RAIDb1ec.disableBackend(), org.objectweb.cjdbc.controller.loadbalancer.raidb2.RAIDb2ec.enableBackend(), と org.objectweb.cjdbc.controller.loadbalancer.raidb1.RAIDb1ec.enableBackend().
|
|
Threads executing read. ReadPrioritaryFIFOWriteLock.java の 47 行で定義されています。 参照元 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.acquireRead(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.acquireWrite(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.isReadLocked(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.ReadPrioritaryFIFOWriteLock(), と org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.releaseRead(). |
|
Is there an active writer? ReadPrioritaryFIFOWriteLock.java の 50 行で定義されています。 参照元 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.acquireRead(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.acquireWrite(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.isWriteLocked(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.ReadPrioritaryFIFOWriteLock(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.releaseRead(), と org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.releaseWrite(). |
|
ReadPrioritaryFIFOWriteLock.java の 58 行で定義されています。 参照元 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.acquireRead(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.ReadPrioritaryFIFOWriteLock(), と org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.releaseWrite(). |
|
Threads not yet in read. ReadPrioritaryFIFOWriteLock.java の 53 行で定義されています。 参照元 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.acquireRead(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.ReadPrioritaryFIFOWriteLock(), と org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.releaseWrite(). |
|
Threads not yet in write. ReadPrioritaryFIFOWriteLock.java の 56 行で定義されています。 参照元 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.acquireRead(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.acquireWrite(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.ReadPrioritaryFIFOWriteLock(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.releaseRead(), と org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.releaseWrite(). |
|
ReadPrioritaryFIFOWriteLock.java の 59 行で定義されています。 参照元 org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.acquireWrite(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.ReadPrioritaryFIFOWriteLock(), org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.releaseRead(), と org.objectweb.cjdbc.common.util.ReadPrioritaryFIFOWriteLock.releaseWrite(). |