16 #include "odversion.h" 37 inline mDeprecated T
get()
const {
return std::atomic<T>::load(); }
39 inline void setIfLarger(T newval);
42 inline void setIfSmaller(T newval);
46 inline bool setIfValueIs(T curval,T newval,
60 int* actualvalptr = 0 )
63 const int oldval =InterlockedCompareExchange( (
volatile long*) &val, newval,
67 if ( actualvalptr ) *actualvalptr = oldval;
74 const int old = __sync_val_compare_and_swap( &val, curval, newval );
77 if ( actualvalptr ) *actualvalptr = old;
97 inline bool setIfEqual(
const T* curptr, T* newptr);
106 bool operator!()
const {
return !std::atomic<T*>::load(); }
107 operator bool()
const {
return std::atomic<T*>::load();}
110 const T*
operator->()
const {
return std::atomic<T*>::load(); }
115 inline T* setToNull();
133 SpinLock(
bool recursive =
false);
138 SpinLock(
const SpinLock&);
156 int count()
const {
return count_; }
177 SpinRWLock(
const SpinRWLock&);
190 int count()
const {
return count_; }
204 if ( oldval>=newval )
207 while ( !setIfValueIs( oldval, newval, &oldval ) );
216 if ( oldval<=newval )
219 while ( !setIfValueIs( oldval, newval, &oldval ) );
223 template <
class T>
inline 225 :
std::atomic<T>( val )
229 template <
class T>
inline 231 :
std::atomic<T>( (T) val )
235 template <
class T>
inline 240 template <
class T>
inline 242 { std::atomic<T>::store(nv);
return *
this; }
245 template <
class T>
inline 247 { std::atomic<T>::store(nv);
return *
this; }
250 template <
class T>
inline 253 T presumedval = curval;
254 if ( !this->compare_exchange_strong(presumedval,newval) )
257 *actualvalptr = presumedval;
267 template <
class T>
inline 269 :
std::atomic<T*>( newptr )
273 template <
class T>
inline 276 T* curval =
const_cast<T*
>( oldptr );
277 return this->compare_exchange_strong( curval, newptr );
281 template <
class T>
inline 284 return std::atomic<T*>::exchange( 0 );
288 template <
class T>
inline 291 std::atomic<T*>::store( ptr );
296 template <
class T>
inline #define mExpClass(module)
Definition: commondefs.h:157
void setIfLarger(T newval)
Definition: atomic.h:199
bool operator!() const
Definition: atomic.h:106
Atomic(T val=0)
Definition: atomic.h:224
Atomic< int > count_
Definition: atomic.h:152
SpinLock & operator=(const SpinLock &b)
Definition: atomic.h:141
bool setIfEqual(const T *curptr, T *newptr)
Definition: atomic.h:274
T * setToNull()
Definition: atomic.h:282
Atomic< int > count_
Definition: atomic.h:187
Definition: fixedstreambuf.h:18
T * operator->()
Definition: atomic.h:109
AtomicPointer(T *newptr=0)
Definition: atomic.h:268
Atomic< void * > lockingthread_
Definition: atomic.h:149
interface to threads that should be portable.
Definition: atomic.h:24
int count() const
Definition: atomic.h:156
Is an alternative to Mutex. It is a lock which causes a thread trying to acquire it to simply wait in...
Definition: atomic.h:130
Atomic< T > & operator=(T nv)
Definition: atomic.h:241
bool recursive_
Definition: atomic.h:153
Atomic instantiated with a pointer. The class really only handles the casting from a void* to a T*...
Definition: atomic.h:92
#define mDeprecated
Definition: plfdefs.h:213
int count() const
Definition: atomic.h:190
~Atomic()
Definition: atomic.h:236
bool atomicSetIfValueIs(volatile int &val, int curval, int newval, int *actualvalptr=0)
Definition: atomic.h:59
#define mClass(module)
Definition: commondefs.h:161
bool setIfValueIs(T curval, T newval, T *actualvalptr=0)
Definition: atomic.h:251
Is an alternative to ReadWriteLock. It is a lock which causes a thread trying to acquire it to simply...
Definition: atomic.h:169
const T * operator->() const
Definition: atomic.h:110
void setIfSmaller(T newval)
Definition: atomic.h:211
AtomicPointer< T > & operator=(T *ptr)
Definition: atomic.h:289