PTLib
Version 2.10.4
|
This class implements an integer that can be atomically incremented and decremented in a thread-safe manner. More...
#include <critsec.h>
Public Types | |
typedef int | IntegerType |
Public Member Functions | |
PAtomicInteger (IntegerType value=0) | |
Create a PAtomicInteger with the specified initial value. | |
~PAtomicInteger () | |
Destroy the atomic integer. | |
__inline | operator IntegerType () const |
__inline PAtomicInteger & | operator= (IntegerType i) |
Assign a value to the atomic integer. | |
__inline PAtomicInteger & | operator= (const PAtomicInteger &ref) |
Assign a value to the atomic integer. | |
void | SetValue (IntegerType value) |
Set the value of the atomic integer. | |
__inline bool | IsZero () const |
Test if an atomic integer has a zero value. | |
__inline bool | operator! () const |
Test if atomic integer has a non-zero value. | |
IntegerType | operator++ () |
atomically pre-increment the integer value | |
IntegerType | operator++ (int) |
atomically post-increment the integer value | |
IntegerType | operator-- () |
atomically pre-decrement the integer value | |
IntegerType | operator-- (int) |
atomically post-decrement the integer value |
Protected Attributes | |
pthread_mutex_t | m_mutex |
IntegerType | m_value |
Friends | |
__inline ostream & | operator<< (ostream &strm, const PAtomicInteger &i) |
This class implements an integer that can be atomically incremented and decremented in a thread-safe manner.
On Windows, the integer is of type long and this class is implemented using InterlockedIncrement and InterlockedDecrement integer is of type long. On Unix systems with GNU std++ support for EXCHANGE_AND_ADD, the integer is of type _Atomic_word (normally int) On all other systems, this class is implemented using PCriticalSection and the integer is of type int.
typedef int PAtomicInteger::IntegerType |
|
explicit |
Create a PAtomicInteger with the specified initial value.
value | initial value |
__inline PAtomicInteger::~PAtomicInteger | ( | ) |
Destroy the atomic integer.
|
inline |
Test if an atomic integer has a zero value.
Note that this is a non-atomic test - use the return value of the operator++() or operator–() tests to perform atomic operations
References m_value.
|
inline |
References m_value.
|
inline |
Test if atomic integer has a non-zero value.
References m_value.
__inline PAtomicInteger::IntegerType PAtomicInteger::operator++ | ( | ) |
atomically pre-increment the integer value
References m_value.
__inline PAtomicInteger::IntegerType PAtomicInteger::operator++ | ( | int | ) |
atomically post-increment the integer value
References m_value.
__inline PAtomicInteger::IntegerType PAtomicInteger::operator-- | ( | ) |
atomically pre-decrement the integer value
References m_value.
__inline PAtomicInteger::IntegerType PAtomicInteger::operator-- | ( | int | ) |
atomically post-decrement the integer value
References m_value.
|
inline |
Assign a value to the atomic integer.
References SetValue().
|
inline |
Assign a value to the atomic integer.
References SetValue().
__inline void PAtomicInteger::SetValue | ( | IntegerType | value | ) |
Set the value of the atomic integer.
value | value to set |
References m_value.
Referenced by operator=().
|
friend |
|
protected |
|
protected |
Referenced by IsZero(), operator IntegerType(), operator!(), operator++(), operator--(), and SetValue().