Lunchbox  1.8.0
Public Member Functions | Static Public Member Functions | List of all members
lunchbox::Atomic< T > Class Template Reference

A variable with atomic semantics and standalone atomic operations. More...

#include <atomic.h>

+ Collaboration diagram for lunchbox::Atomic< T >:

Public Member Functions

 Atomic (const T v=0)
 Construct a new atomic variable with an initial value.
 Atomic (const Atomic< T > &v)
 Construct a copy of an atomic variable.
 operator T (void) const
void operator= (const T v)
 Assign a new value.
void operator= (const Atomic< T > &v)
 Assign a new value.
operator+= (T v)
 Atomically add a value and return the new value.
operator-= (T v)
 Atomically substract a value and return the new value.
operator++ (void)
 Atomically increment by one and return the new value.
operator-- (void)
 Atomically decrement by one and return the new value.
operator++ (int)
 Atomically increment by one and return the old value.
operator-- (int)
 Atomically decrement by one and return the old value.
bool operator== (const Atomic< T > &rhs) const
bool operator!= (const Atomic< T > &rhs) const
bool compareAndSwap (const T expected, const T newValue)
 Perform a compare-and-swap atomic operation.

Static Public Member Functions

static T getAndAdd (T &value, const T increment)
static T getAndSub (T &value, const T increment)
static T addAndGet (T &value, const T increment)
static T subAndGet (T &value, const T increment)
static T incAndGet (T &value)
static T decAndGet (T &value)
static bool compareAndSwap (T *value, const T expected, const T newValue)
 Perform a compare-and-swap atomic operation.

Detailed Description

template<class T>
class lunchbox::Atomic< T >

A variable with atomic semantics and standalone atomic operations.

Atomic variables can be modified safely from multiple threads concurrently. They are useful to implement lock-free algorithms.

For implementation reasons, only signed atomic variables are supported, of which only int32_t is implemented right now.

Definition at line 84 of file atomic.h.

Constructor & Destructor Documentation

template<class T>
lunchbox::Atomic< T >::Atomic ( const T  v = 0)
explicit

Construct a new atomic variable with an initial value.

Version
1.0

Definition at line 309 of file atomic.h.

template<class T>
lunchbox::Atomic< T >::Atomic ( const Atomic< T > &  v)

Construct a copy of an atomic variable.

Not thread-safe!

Version
1.0

Definition at line 312 of file atomic.h.

Member Function Documentation

template<class T>
T lunchbox::Atomic< T >::addAndGet ( T &  value,
const T  increment 
)
static
Returns
the new value after adding the given increment.

Definition at line 268 of file atomic.h.

References lunchbox::memoryBarrierAcquire(), and lunchbox::memoryBarrierRelease().

+ Here is the call graph for this function:

template<class T>
static bool lunchbox::Atomic< T >::compareAndSwap ( T *  value,
const T  expected,
const T  newValue 
)
static

Perform a compare-and-swap atomic operation.

template<class T>
bool lunchbox::Atomic< T >::compareAndSwap ( const T  expected,
const T  newValue 
)

Perform a compare-and-swap atomic operation.

Atomically replaces the value and return true if the value matched the expected.

Returns
true if the new value was set, false otherwise
Version
1.1.2

Definition at line 376 of file atomic.h.

template<class T>
T lunchbox::Atomic< T >::decAndGet ( T &  value)
static
Returns
the new value after decrementing the value.

Definition at line 303 of file atomic.h.

template<class T>
T lunchbox::Atomic< T >::getAndAdd ( T &  value,
const T  increment 
)
static
Returns
the old value, then add the given increment.

Definition at line 238 of file atomic.h.

References lunchbox::memoryBarrierAcquire(), and lunchbox::memoryBarrierRelease().

+ Here is the call graph for this function:

template<class T>
T lunchbox::Atomic< T >::getAndSub ( T &  value,
const T  increment 
)
static
Returns
the old value, then substract the increment.

Definition at line 253 of file atomic.h.

References lunchbox::memoryBarrierAcquire(), and lunchbox::memoryBarrierRelease().

+ Here is the call graph for this function:

template<class T>
T lunchbox::Atomic< T >::incAndGet ( T &  value)
static
Returns
the new value after incrementing the value.

Definition at line 298 of file atomic.h.

template<class T >
lunchbox::Atomic< T >::operator T ( void  ) const
Returns
the current value
Version
1.0

Definition at line 315 of file atomic.h.

References lunchbox::memoryBarrierAcquire().

+ Here is the call graph for this function:

template<class T>
bool lunchbox::Atomic< T >::operator!= ( const Atomic< T > &  rhs) const
Returns
true if the variable has not the given value.
Version
1.1.2

Definition at line 369 of file atomic.h.

References lunchbox::memoryBarrier().

+ Here is the call graph for this function:

template<class T >
T lunchbox::Atomic< T >::operator++ ( void  )

Atomically increment by one and return the new value.

Version
1.0

Definition at line 343 of file atomic.h.

template<class T >
T lunchbox::Atomic< T >::operator++ ( int  )

Atomically increment by one and return the old value.

Version
1.0

Definition at line 353 of file atomic.h.

template<class T>
T lunchbox::Atomic< T >::operator+= ( v)

Atomically add a value and return the new value.

Version
1.0

Definition at line 333 of file atomic.h.

template<class T >
T lunchbox::Atomic< T >::operator-- ( void  )

Atomically decrement by one and return the new value.

Version
1.0

Definition at line 348 of file atomic.h.

template<class T >
T lunchbox::Atomic< T >::operator-- ( int  )

Atomically decrement by one and return the old value.

Version
1.0

Definition at line 358 of file atomic.h.

template<class T>
T lunchbox::Atomic< T >::operator-= ( v)

Atomically substract a value and return the new value.

Version
1.0

Definition at line 338 of file atomic.h.

template<class T>
void lunchbox::Atomic< T >::operator= ( const T  v)

Assign a new value.

Version
1.0

Definition at line 321 of file atomic.h.

References lunchbox::memoryBarrier().

+ Here is the call graph for this function:

template<class T>
void lunchbox::Atomic< T >::operator= ( const Atomic< T > &  v)

Assign a new value.

Not thread-safe!

Version
1.0

Definition at line 327 of file atomic.h.

References lunchbox::memoryBarrier().

+ Here is the call graph for this function:

template<class T>
bool lunchbox::Atomic< T >::operator== ( const Atomic< T > &  rhs) const
Returns
true if the variable has the given value.
Version
1.1.2

Definition at line 363 of file atomic.h.

References lunchbox::memoryBarrier().

+ Here is the call graph for this function:

template<class T>
T lunchbox::Atomic< T >::subAndGet ( T &  value,
const T  increment 
)
static
Returns
the new value after substracting the increment.

Definition at line 283 of file atomic.h.

References lunchbox::memoryBarrierAcquire(), and lunchbox::memoryBarrierRelease().

+ Here is the call graph for this function:


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