MAtomic Class Reference
[OpenMaya - API module for common classes]

#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

Autodesk® Maya® 2011 © 1997-2010 Autodesk, Inc. All rights reserved. Generated with doxygen 1.5.6