Lunchbox
1.11.0
|
A variable with atomic semantics and standalone atomic operations. More...
#include <atomic.h>
Public Member Functions | |
Atomic (const T v=0) | |
Construct a new atomic variable with an initial value. More... | |
Atomic (const Atomic< T > &v) | |
Construct a copy of an atomic variable. More... | |
operator T (void) const | |
void | operator= (const T v) |
Assign a new value. More... | |
void | operator= (const Atomic< T > &v) |
Assign a new value. More... | |
T | operator+= (T v) |
Atomically add a value and return the new value. More... | |
T | operator-= (T v) |
Atomically substract a value and return the new value. More... | |
T | operator++ (void) |
Atomically increment by one and return the new value. More... | |
T | operator-- (void) |
Atomically decrement by one and return the new value. More... | |
T | operator++ (int) |
Atomically increment by one and return the old value. More... | |
T | operator-- (int) |
Atomically decrement by one and return the old value. More... | |
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. More... | |
Static Public Member Functions | |
static LUNCHBOX_API T | getAndAdd (T &value, const T increment) |
static LUNCHBOX_API T | getAndSub (T &value, const T increment) |
static T | addAndGet (T &value, const T increment) |
static T | subAndGet (T &value, const T increment) |
static LUNCHBOX_API T | incAndGet (T &value) |
static LUNCHBOX_API T | decAndGet (T &value) |
static LUNCHBOX_API bool | compareAndSwap (T *value, const T expected, const T newValue) |
Perform a compare-and-swap atomic operation. More... | |
A variable with atomic semantics and standalone atomic operations.
Use the C++11 equivalent if you can.
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 int32_t and ssize_t are implemented and typedef'd as a_int32_t and a_ssize_t.
|
explicit |
lunchbox::Atomic< T >::Atomic | ( | const Atomic< T > & | v | ) |
|
static |
Definition at line 271 of file atomic.h.
References lunchbox::memoryBarrierAcquire(), and lunchbox::memoryBarrierRelease().
|
static |
Perform a compare-and-swap atomic operation.
bool lunchbox::Atomic< T >::compareAndSwap | ( | const T | expected, |
const T | newValue | ||
) |
|
static |
|
static |
Definition at line 241 of file atomic.h.
References lunchbox::memoryBarrierAcquire(), and lunchbox::memoryBarrierRelease().
|
static |
Definition at line 256 of file atomic.h.
References lunchbox::memoryBarrierAcquire(), and lunchbox::memoryBarrierRelease().
|
static |
lunchbox::Atomic< T >::operator T | ( | void | ) | const |
Definition at line 318 of file atomic.h.
References lunchbox::memoryBarrierAcquire().
bool lunchbox::Atomic< T >::operator!= | ( | const Atomic< T > & | rhs | ) | const |
Definition at line 372 of file atomic.h.
References lunchbox::memoryBarrier().
T lunchbox::Atomic< T >::operator++ | ( | void | ) |
T lunchbox::Atomic< T >::operator++ | ( | int | ) |
T lunchbox::Atomic< T >::operator+= | ( | T | v | ) |
T lunchbox::Atomic< T >::operator-- | ( | void | ) |
T lunchbox::Atomic< T >::operator-- | ( | int | ) |
T lunchbox::Atomic< T >::operator-= | ( | T | v | ) |
void lunchbox::Atomic< T >::operator= | ( | const T | v | ) |
Assign a new value.
Definition at line 324 of file atomic.h.
References lunchbox::memoryBarrier().
void lunchbox::Atomic< T >::operator= | ( | const Atomic< T > & | v | ) |
Assign a new value.
Not thread-safe!
Definition at line 330 of file atomic.h.
References lunchbox::memoryBarrier().
bool lunchbox::Atomic< T >::operator== | ( | const Atomic< T > & | rhs | ) | const |
Definition at line 366 of file atomic.h.
References lunchbox::memoryBarrier().
|
static |
Definition at line 286 of file atomic.h.
References lunchbox::memoryBarrierAcquire(), and lunchbox::memoryBarrierRelease().