Class AbstractGammaObject
- java.lang.Object
-
- org.multiverse.stms.gamma.transactionalobjects.AbstractGammaObject
-
- All Implemented Interfaces:
Lock,MultiverseConstants,GammaConstants,GammaObject
- Direct Known Subclasses:
BaseGammaTxnRef
public abstract class AbstractGammaObject extends Object implements GammaObject, Lock
-
-
Field Summary
Fields Modifier and Type Field Description protected static sun.misc.Unsafe___unsafeprotected intidentityHashCodeListenerslistenersprotected static longlistenersOffsetstatic longMASK_OREC_EXCLUSIVELOCKstatic longMASK_OREC_READBIASEDstatic longMASK_OREC_READLOCKSstatic longMASK_OREC_READONLY_COUNTstatic longMASK_OREC_SURPLUSstatic longMASK_OREC_UPDATELOCKlongorecGammaStmstmprotected static longvalueOffsetlongversion-
Fields inherited from interface org.multiverse.stms.gamma.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_UNCOMMITTED
-
Fields inherited from interface org.multiverse.MultiverseConstants
LOCKMODE_EXCLUSIVE, LOCKMODE_NONE, LOCKMODE_READ, LOCKMODE_WRITE, SHAKE_BUGS, SPIN_YIELD, TRACING_ENABLED
-
-
Constructor Summary
Constructors Constructor Description AbstractGammaObject(GammaStm stm)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Listeners___removeListenersAfterWrite()String___toOrecString()intarrive(int spinCount)Arrives.intarriveAndExclusiveLock(int spinCount)Tries to acquire the exclusive lock and arrive.intarriveAndLock(int spinCount, int lockMode)Arrives and tries to acquire the lock.LockModeatomicGetLockMode()Returns the current LockMode.intatomicGetLockModeAsInt()voiddepartAfterFailure()Departs after failure.voiddepartAfterFailureAndUnlock()Departs after a transaction fails and has an arrive on this Orec.voiddepartAfterReading()Departs after a successful read is done and no lock was acquired.voiddepartAfterReadingAndUnlock()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.voiddepartAfterUpdateAndUnlock()LockgetLock()LockModegetLockMode()Gets the LockMode the transaction stored in the theTxnThreadLocalhas on this Lock.LockModegetLockMode(Txn tx)Gets the LockMode the transaction has on the Lock.LockModegetLockMode(GammaTxn tx)intgetReadBiasedThreshold()intgetReadLockCount()static intgetReadLockCount(long value)intgetReadonlyCount()static intgetReadonlyCount(long value)GammaStmgetStm()longgetSurplus()static longgetSurplus(long value)longgetVersion()static booleanhasAnyLock(long value)booleanhasExclusiveLock()static booleanhasExclusiveLock(long value)booleanhasWriteLock()static booleanhasWriteLock(long value)static booleanhasWriteOrExclusiveLock(long value)intidentityHashCode()booleanisReadBiased()static booleanisReadBiased(long value)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)voidunlockByUnregistered()intupgradeReadLock(int spinCount, boolean exclusiveLock)booleanupgradeWriteLock()Upgrades the writeLock to an exclusive lock.booleanwaitForExclusiveLockToBecomeFree(int spinCount)
-
-
-
Field Detail
-
MASK_OREC_EXCLUSIVELOCK
public static final long MASK_OREC_EXCLUSIVELOCK
- See Also:
- Constant Field Values
-
MASK_OREC_UPDATELOCK
public static final long MASK_OREC_UPDATELOCK
- See Also:
- Constant Field Values
-
MASK_OREC_READBIASED
public static final long MASK_OREC_READBIASED
- See Also:
- Constant Field Values
-
MASK_OREC_READLOCKS
public static final long MASK_OREC_READLOCKS
- See Also:
- Constant Field Values
-
MASK_OREC_SURPLUS
public static final long MASK_OREC_SURPLUS
- See Also:
- Constant Field Values
-
MASK_OREC_READONLY_COUNT
public static final long MASK_OREC_READONLY_COUNT
- See Also:
- Constant Field Values
-
___unsafe
protected static final sun.misc.Unsafe ___unsafe
-
listenersOffset
protected static final long listenersOffset
-
valueOffset
protected static final long valueOffset
-
stm
public final GammaStm stm
-
listeners
public volatile Listeners listeners
-
version
public volatile long version
-
orec
public volatile long orec
-
identityHashCode
protected int identityHashCode
-
-
Constructor Detail
-
AbstractGammaObject
public AbstractGammaObject(GammaStm stm)
-
-
Method Detail
-
getVersion
public final long getVersion()
- Specified by:
getVersionin interfaceGammaObject
-
getStm
public final GammaStm getStm()
- Specified by:
getStmin interfaceGammaObject
-
getLock
public final Lock getLock()
- Specified by:
getLockin interfaceGammaObject
-
___removeListenersAfterWrite
public final Listeners ___removeListenersAfterWrite()
-
identityHashCode
public final int identityHashCode()
- Specified by:
identityHashCodein interfaceGammaObject
-
atomicGetLockModeAsInt
public final int atomicGetLockModeAsInt()
-
atomicGetLockMode
public final LockMode 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
public final 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:
Lock.atomicGetLockMode(),Lock.getLockMode(Txn)
-
getLockMode
public final LockMode getLockMode(Txn tx)
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:
Lock.atomicGetLockMode(),Lock.getLockMode(Txn)
-
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
public final String ___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)
-
-