#include
<MAtomic.h>
List of all
members.
Detailed Description
Methods for atomic operations.
The MAtomic class implements
several cross-platform atomic operations which are useful when
writing a multithreaded application. Atomic operations are those
that appear to happen as a single operation when viewed from other
threads.
As a usage example, during reference counting in an SMP
environment, it is important to ensure that decrementing and
testing the counter against zero happens atomically. If coded this
way:
if (--counter == 0) {}
then another thread could modify the value of counter between
the decrement and the if test. The above code would therefore get
the wrong value. This class provides a routine to perform the
decrement and return the previous value atomically, so the above
snippet could be written as:
if (MAtomic::preDecrement(&counter) == 0) {}
|
Static Public Member Functions
|
static FORCE_INLINE int |
preIncrement
(volatile int *variable) |
static FORCE_INLINE int |
postIncrement
(volatile int *variable) |
static FORCE_INLINE int |
increment
(volatile int *variable, int incrementValue) |
static FORCE_INLINE int |
preDecrement
(volatile int *variable) |
static FORCE_INLINE int |
postDecrement
(volatile int *variable) |
static FORCE_INLINE int |
decrement
(volatile int *variable, int decrementValue) |
static FORCE_INLINE int |
set
(volatile int *variable, int newValue) |
static FORCE_INLINE int |
compareAndSwap
(volatile int *variable, int compareValue, int swapValue) |
Member Function Documentation
static FORCE_INLINE int
MAtomic::preIncrement |
( |
volatile int * |
variable |
) |
[inline, static] |
Increment variable, return value after increment
- Parameters:
-
[in] |
variable |
Value to be modified |
- Returns:
- . Variable value after incrementing
static FORCE_INLINE int
MAtomic::postIncrement |
( |
volatile int * |
variable |
) |
[inline, static] |
Increment variable, return value before increment
- Parameters:
-
[in] |
variable |
Value to be modified |
- Returns:
- . Variable value before incrementing
static FORCE_INLINE int MAtomic::increment |
( |
volatile int * |
variable, |
|
|
int |
incrementValue |
|
|
) |
|
|
[inline, static] |
Increment variable by incrementValue, return value before
increment.
- Parameters:
-
[in] |
variable |
Value to be modified |
[in] |
incrementValue |
Value by which to increment variable |
- Returns:
- . Variable value before incrementing
static FORCE_INLINE int
MAtomic::preDecrement |
( |
volatile int * |
variable |
) |
[inline, static] |
Decrement variable, return value after increment
- Parameters:
-
[in] |
variable |
Value to be modified |
- Returns:
- . Variable value after decrementing
static FORCE_INLINE int
MAtomic::postDecrement |
( |
volatile int * |
variable |
) |
[inline, static] |
Decrement variable, return value before decrement
- Parameters:
-
[in] |
variable |
Value to be modified |
- Returns:
- . Variable value before decrementing
static FORCE_INLINE int MAtomic::decrement |
( |
volatile int * |
variable, |
|
|
int |
decrementValue |
|
|
) |
|
|
[inline, static] |
Decrement variable by decrementValue, return value before
decrement.
- Parameters:
-
[in] |
variable |
Value to be modified |
[in] |
decrementValue |
Value by which to decrement variable |
- Returns:
- . Variable value before decrementing
static FORCE_INLINE int MAtomic::set |
( |
volatile int * |
variable, |
|
|
int |
newValue |
|
|
) |
|
|
[inline, static] |
Set variable to newValue, return value of variable before
set.
- Parameters:
-
[in] |
variable |
Value to be modified |
[in] |
newValue |
Value to which to set variable |
- Returns:
- . Variable value before set
static FORCE_INLINE int
MAtomic::compareAndSwap |
( |
volatile int * |
variable, |
|
|
int |
compareValue, |
|
|
int |
swapValue |
|
|
) |
|
|
[inline, static] |
Compare variable with compareValue and if the values are equal,
sets *variable equal to swapValue. The result of the comparison is
returned, true if the compare was sucessful, false otherwise.
- Parameters:
-
[in] |
variable |
First value to be compared |
[in] |
compareValue |
Second value to be compared |
[in] |
swapValue |
Value to set *variable to if comparison is successful |
- Returns:
- . True if variable equals compareValue, otherwise false