com.sleepycat.je.latch
Interface SharedLatch

All Known Implementing Classes:
Java5SharedLatchImpl, SharedLatchImpl

public interface SharedLatch

Simple thread-based non-transactional reader-writer/shared-exclusive latch. Latches provide simple exclusive or shared transient locks on objects. Latches are expected to be held for short, defined periods of time. No deadlock detection is provided so it is the caller's responsibility to sequence latch acquisition in an ordered fashion to avoid deadlocks.


Method Summary
 void acquireExclusive()
          Acquire a latch for exclusive/write access.
 boolean acquireExclusiveNoWait()
          Probe a latch for exclusive access, but don't block if it's not available.
 void acquireShared()
          Acquire a latch for shared/read access.
 boolean isOwner()
          Return true if this thread is an owner, reader, or write.
 boolean isWriteLockedByCurrentThread()
           
 void release()
          Release an exclusive or shared latch.
 void releaseIfOwner()
          Release the latch.
 void setExclusiveOnly(boolean exclusiveOnly)
          Indicate whether this latch can only be set exclusively (not shared).
 void setName(java.lang.String name)
          Set the latch name, used for latches in objects instantiated from the log.
 boolean setNoteLatch(boolean noteLatch)
          Indicate whether this latch should be tracked in the debugging LatchSupport.latchTable.
 

Method Detail

setName

void setName(java.lang.String name)
Set the latch name, used for latches in objects instantiated from the log.


setNoteLatch

boolean setNoteLatch(boolean noteLatch)
Indicate whether this latch should be tracked in the debugging LatchSupport.latchTable. Always return true so this can be called under an assert.


setExclusiveOnly

void setExclusiveOnly(boolean exclusiveOnly)
Indicate whether this latch can only be set exclusively (not shared). Used for BIN latches that are Shared, but should only be latched exclusively.


acquireExclusive

void acquireExclusive()
                      throws DatabaseException
Acquire a latch for exclusive/write access. If the thread already holds the latch for shared access, it cannot be upgraded and LatchException will be thrown. Wait for the latch if some other thread is holding it. If there are threads waiting for access, they will be granted the latch on a FIFO basis if fair latches are enabled. When the method returns, the latch is held for exclusive access.

Throws:
LatchException - if the latch is already held by the current thread for shared access.
DatabaseException

acquireExclusiveNoWait

boolean acquireExclusiveNoWait()
                               throws DatabaseException
Probe a latch for exclusive access, but don't block if it's not available.

Returns:
true if the latch was acquired, false if it is not available.
Throws:
LatchException - if the latch is already held by the calling thread.
DatabaseException

acquireShared

void acquireShared()
                   throws DatabaseException
Acquire a latch for shared/read access. Nesting is allowed, that is, the latch may be acquired more than once by the same thread.

Throws:
RunRecoveryException - if an InterruptedException exception occurs.
DatabaseException

release

void release()
             throws LatchNotHeldException
Release an exclusive or shared latch. If there are other thread(s) waiting for the latch, they are woken up and granted the latch.

Throws:
LatchNotHeldException

isWriteLockedByCurrentThread

boolean isWriteLockedByCurrentThread()

releaseIfOwner

void releaseIfOwner()
                    throws LatchNotHeldException
Release the latch. If there are other thread(s) waiting for the latch, one is woken up and granted the latch. If the latch was not owned by the caller, just return.

Throws:
LatchNotHeldException

isOwner

boolean isOwner()
Return true if this thread is an owner, reader, or write.



Copyright 2004,2008 Oracle. All rights reserved.