GemaCoreLib
The GeMA Core library
Loading...
Searching...
No Matches
GmSpinLock Class Reference

A simple spin lock implementation based on a loop using test and set over an atomic int to change its value from 0 to 1. More...

#include <gmSpinLock.h>

Inheritance diagram for GmSpinLock:
Collaboration diagram for GmSpinLock:

Public Member Functions

 GmSpinLock ()
 Constructor.
 
void lock ()
 Aquires the lock.
 
bool tryLock ()
 Try to lock. Returns true if the lock was aquired, false otherwise.
 
void unlock ()
 Releases the lock.
 
- Public Member Functions inherited from QAtomicInt
 QAtomicInt (int value)
 
- Public Member Functions inherited from QAtomicInteger
 QAtomicInteger (T value)
 
 QAtomicInteger (const QAtomicInteger< T > &other)
 
QAtomicInteger< T > & operator= (const QAtomicInteger< T > &other)
 
load () const const
 
loadRelaxed () const const
 
loadAcquire () const const
 
void store (T newValue)
 
void storeRelaxed (T newValue)
 
void storeRelease (T newValue)
 
operator T () const const
 
QAtomicInteger< T > & operator= (T)
 
bool ref ()
 
bool deref ()
 
bool testAndSetRelaxed (T expectedValue, T newValue)
 
bool testAndSetAcquire (T expectedValue, T newValue)
 
bool testAndSetRelease (T expectedValue, T newValue)
 
bool testAndSetOrdered (T expectedValue, T newValue)
 
fetchAndStoreRelaxed (T newValue)
 
fetchAndStoreAcquire (T newValue)
 
fetchAndStoreRelease (T newValue)
 
fetchAndStoreOrdered (T newValue)
 
fetchAndAddRelaxed (T valueToAdd)
 
fetchAndAddAcquire (T valueToAdd)
 
fetchAndAddRelease (T valueToAdd)
 
fetchAndAddOrdered (T valueToAdd)
 
fetchAndSubRelaxed (T valueToSub)
 
fetchAndSubAcquire (T valueToSub)
 
fetchAndSubRelease (T valueToSub)
 
fetchAndSubOrdered (T valueToSub)
 
fetchAndOrRelaxed (T valueToOr)
 
fetchAndOrAcquire (T valueToOr)
 
fetchAndOrRelease (T valueToOr)
 
fetchAndOrOrdered (T valueToOr)
 
fetchAndAndRelaxed (T valueToAnd)
 
fetchAndAndAcquire (T valueToAnd)
 
fetchAndAndRelease (T valueToAnd)
 
fetchAndAndOrdered (T valueToAnd)
 
fetchAndXorRelaxed (T valueToXor)
 
fetchAndXorAcquire (T valueToXor)
 
fetchAndXorRelease (T valueToXor)
 
fetchAndXorOrdered (T valueToXor)
 
operator++ ()
 
operator++ (int)
 
operator-- ()
 
operator-- (int)
 
operator+= (T value)
 
operator-= (T value)
 
operator|= (T value)
 
operator&= (T value)
 
operator^= (T value)
 
 Q_ATOMIC_INTnn_IS_SUPPORTED Q_ATOMIC_INTnn_IS_SUPPORTED
 
 Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_ALWAYS_NATIVE Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
 
 Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_SOMETIMES_NATIVE Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_SOMETIMES_NATIVE
 
 Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_NOT_NATIVE Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_NOT_NATIVE
 
 Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_WAIT_FREE Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_WAIT_FREE
 
 Q_ATOMIC_INTnn_TEST_AND_SET_IS_ALWAYS_NATIVE Q_ATOMIC_INTnn_TEST_AND_SET_IS_ALWAYS_NATIVE
 
 Q_ATOMIC_INTnn_TEST_AND_SET_IS_SOMETIMES_NATIVE Q_ATOMIC_INTnn_TEST_AND_SET_IS_SOMETIMES_NATIVE
 
 Q_ATOMIC_INTnn_TEST_AND_SET_IS_NOT_NATIVE Q_ATOMIC_INTnn_TEST_AND_SET_IS_NOT_NATIVE
 
 Q_ATOMIC_INTnn_TEST_AND_SET_IS_WAIT_FREE Q_ATOMIC_INTnn_TEST_AND_SET_IS_WAIT_FREE
 
 Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_ALWAYS_NATIVE Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_ALWAYS_NATIVE
 
 Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_SOMETIMES_NATIVE Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_SOMETIMES_NATIVE
 
 Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_NOT_NATIVE Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_NOT_NATIVE
 
 Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_WAIT_FREE Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_WAIT_FREE
 
 Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_ALWAYS_NATIVE Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_ALWAYS_NATIVE
 
 Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_SOMETIMES_NATIVE Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_SOMETIMES_NATIVE
 
 Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_NOT_NATIVE Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_NOT_NATIVE
 
 Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_WAIT_FREE Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_WAIT_FREE
 

Additional Inherited Members

- Static Public Member Functions inherited from QAtomicInteger
bool isReferenceCountingNative ()
 
bool isReferenceCountingWaitFree ()
 
bool isTestAndSetNative ()
 
bool isTestAndSetWaitFree ()
 
bool isFetchAndStoreNative ()
 
bool isFetchAndStoreWaitFree ()
 
bool isFetchAndAddNative ()
 
bool isFetchAndAddWaitFree ()
 

Detailed Description

A simple spin lock implementation based on a loop using test and set over an atomic int to change its value from 0 to 1.

TODO: See some ideas in https://geidav.wordpress.com/2016/03/23/test-and-set-spinlocks/ to improve the lock efficiency by, for example, emmitting a pause instruction in the loop.


The documentation for this class was generated from the following file: