Class AbstractGammaObject

    • Field Detail

      • MASK_OREC_EXCLUSIVELOCK

        public static final long MASK_OREC_EXCLUSIVELOCK
        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
      • 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

      • ___removeListenersAfterWrite

        public final Listeners ___removeListenersAfterWrite()
      • atomicGetLockModeAsInt

        public final int atomicGetLockModeAsInt()
      • atomicGetLockMode

        public final LockMode atomicGetLockMode()
        Description copied from interface: Lock
        Returns 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, the Lock.getLockMode() or Lock.getLockMode(Txn) need to be used.
        Specified by:
        atomicGetLockMode in interface Lock
        Returns:
        the current LockMode.
      • 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 java.lang.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)