GemaCoreLib
The GeMA Core library
Public Member Functions | List of all members
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:
Inheritance graph
[legend]
Collaboration diagram for GmSpinLock:
Collaboration graph
[legend]

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
 
loadAcquire () const const
 
void store (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)
 

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: