#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