Class AbstractGammaObject
java.lang.Object
org.multiverse.stms.gamma.transactionalobjects.AbstractGammaObject
- All Implemented Interfaces:
Lock, MultiverseConstants, GammaConstants, GammaObject
- Direct Known Subclasses:
BaseGammaTxnRef
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final sun.misc.Unsafeprotected intprotected static final longstatic final longstatic final longstatic final longstatic final longstatic final longstatic final longlongprivate final intfinal GammaStmprotected static final longlongFields inherited from interface GammaConstants
FAILURE, MASK_CONFLICT, MASK_SUCCESS, MASK_UNREGISTERED, REGISTRATION_DONE, REGISTRATION_NONE, REGISTRATION_NOT_NEEDED, TRANLOCAL_COMMUTING, TRANLOCAL_CONSTRUCTING, TRANLOCAL_READ, TRANLOCAL_WRITE, TRANSACTIONTYPE_FAT_FIXED_LENGTH, TRANSACTIONTYPE_FAT_MONO, TRANSACTIONTYPE_FAT_VARIABLE_LENGTH, TRANSACTIONTYPE_LEAN_FIXED_LENGTH, TRANSACTIONTYPE_LEAN_MONO, TX_ABORTED, TX_ACTIVE, TX_COMMITTED, TX_PREPARED, TYPE_BOOLEAN, TYPE_DOUBLE, TYPE_INT, TYPE_LONG, TYPE_REF, VERSION_UNCOMMITTEDFields inherited from interface MultiverseConstants
LOCKMODE_EXCLUSIVE, LOCKMODE_NONE, LOCKMODE_READ, LOCKMODE_WRITE, SHAKE_BUGS, SPIN_YIELD, TRACING_ENABLED -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfinal Listenersfinal Stringfinal intarrive(int spinCount) Arrives.final intarriveAndExclusiveLock(int spinCount) Tries to acquire the exclusive lock and arrive.final intarriveAndLock(int spinCount, int lockMode) Arrives and tries to acquire the lock.final LockModeReturns the current LockMode.final intfinal voidDeparts after failure.final voidDeparts after a transaction fails and has an arrive on this Orec.final voidDeparts after a successful read is done and no lock was acquired.final voidDeparts after a successful read is done and release the lock (it doesn't matter which lock is acquired as long is it is a read/write/exclusive lock.final voidfinal LockgetLock()final LockModeGets the LockMode the transaction stored in the theTxnThreadLocalhas on this Lock.final LockModegetLockMode(Txn tx) Gets the LockMode the transaction has on the Lock.final LockModegetLockMode(GammaTxn tx) final intfinal intstatic intgetReadLockCount(long value) final intstatic intgetReadonlyCount(long value) final GammaStmgetStm()final longstatic longgetSurplus(long value) final longstatic booleanhasAnyLock(long value) final booleanstatic booleanhasExclusiveLock(long value) final booleanstatic booleanhasWriteLock(long value) static booleanhasWriteOrExclusiveLock(long value) final intfinal booleanstatic booleanisReadBiased(long value) final intlockAfterArrive(int spinCount, int lockMode) Arrives and tries to acquire the lock.static longsetExclusiveLock(long value, boolean exclusiveLock) static longsetIsReadBiased(long value, boolean isReadBiased) static longsetReadLockCount(long value, long readLockCount) static longsetReadonlyCount(long value, int readonlyCount) static longsetSurplus(long value, long surplus) static longsetWriteLock(long value, boolean updateLock) private static StringtoOrecString(long value) final voidfinal intupgradeReadLock(int spinCount, boolean exclusiveLock) final booleanUpgrades the writeLock to an exclusive lock.final booleanwaitForExclusiveLockToBecomeFree(int spinCount) private static voidyieldIfNeeded(int remainingSpins)
-
Field Details
-
MASK_OREC_EXCLUSIVELOCK
public static final long MASK_OREC_EXCLUSIVELOCK- See Also:
-
MASK_OREC_UPDATELOCK
public static final long MASK_OREC_UPDATELOCK- See Also:
-
MASK_OREC_READBIASED
public static final long MASK_OREC_READBIASED- See Also:
-
MASK_OREC_READLOCKS
public static final long MASK_OREC_READLOCKS- See Also:
-
MASK_OREC_SURPLUS
public static final long MASK_OREC_SURPLUS- See Also:
-
MASK_OREC_READONLY_COUNT
public static final long MASK_OREC_READONLY_COUNT- See Also:
-
___unsafe
protected static final sun.misc.Unsafe ___unsafe -
listenersOffset
protected static final long listenersOffset -
valueOffset
protected static final long valueOffset -
stm
-
listeners
-
version
public volatile long version -
orec
public volatile long orec -
identityHashCode
protected int identityHashCode -
readBiasedThreshold
private final int readBiasedThreshold
-
-
Constructor Details
-
AbstractGammaObject
-
-
Method Details
-
getVersion
public final long getVersion()- Specified by:
getVersionin interfaceGammaObject
-
getStm
- Specified by:
getStmin interfaceGammaObject
-
getLock
- Specified by:
getLockin interfaceGammaObject
-
___removeListenersAfterWrite
-
identityHashCode
public final int identityHashCode()- Specified by:
identityHashCodein interfaceGammaObject
-
atomicGetLockModeAsInt
public final int atomicGetLockModeAsInt() -
atomicGetLockMode
Description copied from interface:LockReturns the current LockMode. This call doesn't look at any running transaction, it shows the actual state of the Lock. The value could be stale as soon as it is received. To retrieve the LockMode a a Txn has on a Lock, theLock.getLockMode()orLock.getLockMode(Txn)need to be used.- Specified by:
atomicGetLockModein interfaceLock- Returns:
- the current LockMode.
-
getLockMode
Description copied from interface:LockGets the LockMode the transaction stored in the theTxnThreadLocalhas on this Lock. To retrieve the actual LockMode of the Lock, you need to use theLock.atomicGetLockMode().- Specified by:
getLockModein interfaceLock- Returns:
- the LockMode.
- See Also:
-
getLockMode
Description copied from interface:LockGets the LockMode the transaction has on the Lock. This call makes use of the tx. To retrieve the actual LockMode of the Lock, you need to use theLock.atomicGetLockMode()- Specified by:
getLockModein interfaceLock- Parameters:
tx- the Lock- Returns:
- the LockMode the transaction has on the Lock.
- See Also:
-
getLockMode
-
yieldIfNeeded
private static void yieldIfNeeded(int remainingSpins) -
waitForExclusiveLockToBecomeFree
public final boolean waitForExclusiveLockToBecomeFree(int spinCount) -
hasWriteLock
public final boolean hasWriteLock() -
hasExclusiveLock
public final boolean hasExclusiveLock() -
getReadBiasedThreshold
public final int getReadBiasedThreshold() -
getSurplus
public final long getSurplus() -
isReadBiased
public final boolean isReadBiased() -
getReadonlyCount
public final int getReadonlyCount() -
getReadLockCount
public final int getReadLockCount() -
arrive
public final int arrive(int spinCount) Arrives. The Arrive is needed for the fast conflict detection (rich mans conflict).- Parameters:
spinCount- the maximum number of times to spin if the exclusive lock is acquired.- Returns:
- the arrive status.
-
upgradeReadLock
public final int upgradeReadLock(int spinCount, boolean exclusiveLock) -
upgradeWriteLock
public final boolean upgradeWriteLock()Upgrades the writeLock to an exclusive lock.- Returns:
- true if there was at least one conflict write.
-
arriveAndLock
public final int arriveAndLock(int spinCount, int lockMode) Arrives and tries to acquire the lock. If one of them fails, there will not be any state change.- Parameters:
spinCount- the maximum number of times to spin to wait for the lock to come available.lockMode- the desired lockmode. It isn't allowed to be LOCKMODE_NONE.- Returns:
- the result of this operation.
-
arriveAndExclusiveLock
public final int arriveAndExclusiveLock(int spinCount) Tries to acquire the exclusive lock and arrive.- Parameters:
spinCount- the maximum number of spins when it is locked.- Returns:
- the arrive-status.
-
lockAfterArrive
public final int lockAfterArrive(int spinCount, int lockMode) Arrives and tries to acquire the lock. If one of them fails, there will not be any state change.- Parameters:
spinCount- the maximum number of times to spin if a lock is acquired.lockMode- the desired lockMode. This is not allowed to be LOCKMODE_NONE.- Returns:
- the status of the operation.
-
departAfterReading
public final void departAfterReading()Departs after a successful read is done and no lock was acquired. This call increased the readonly count. If the readonly count threshold is reached, the orec is made readbiased and the readonly count is set to 0. -
departAfterReadingAndUnlock
public final void departAfterReadingAndUnlock()Departs after a successful read is done and release the lock (it doesn't matter which lock is acquired as long is it is a read/write/exclusive lock. This method increases the readonly count of the orec and upgraded from update-biased to readbiased if the READBIASED_THRESHOLD is reached (also the readonly count is set to zero if that happens). -
departAfterUpdateAndUnlock
public final void departAfterUpdateAndUnlock() -
departAfterFailureAndUnlock
public final void departAfterFailureAndUnlock()Departs after a transaction fails and has an arrive on this Orec. It doesn't matter what the lock level is, as long as it is higher than LOCKMODE_NONE. This call can safely be made on a read or update biased ref. -
departAfterFailure
public final void departAfterFailure()Departs after failure. -
unlockByUnregistered
public final void unlockByUnregistered() -
___toOrecString
-
setReadLockCount
public static long setReadLockCount(long value, long readLockCount) -
getReadLockCount
public static int getReadLockCount(long value) -
setExclusiveLock
public static long setExclusiveLock(long value, boolean exclusiveLock) -
hasWriteOrExclusiveLock
public static boolean hasWriteOrExclusiveLock(long value) -
hasAnyLock
public static boolean hasAnyLock(long value) -
hasExclusiveLock
public static boolean hasExclusiveLock(long value) -
isReadBiased
public static boolean isReadBiased(long value) -
setIsReadBiased
public static long setIsReadBiased(long value, boolean isReadBiased) -
hasWriteLock
public static boolean hasWriteLock(long value) -
setWriteLock
public static long setWriteLock(long value, boolean updateLock) -
getReadonlyCount
public static int getReadonlyCount(long value) -
setReadonlyCount
public static long setReadonlyCount(long value, int readonlyCount) -
setSurplus
public static long setSurplus(long value, long surplus) -
getSurplus
public static long getSurplus(long value) -
toOrecString
-