17 #ifndef epicsAtomicDefault_h
18 #define epicsAtomicDefault_h
35 #ifndef EPICS_ATOMIC_INCR_INTT
41 epicsAtomicLock ( & key );
42 result = ++(*pTarget);
43 epicsAtomicUnlock ( & key );
48 #ifndef EPICS_ATOMIC_INCR_SIZET
54 epicsAtomicLock ( & key );
55 result = ++(*pTarget);
56 epicsAtomicUnlock ( & key );
64 #ifndef EPICS_ATOMIC_DECR_INTT
70 epicsAtomicLock ( & key );
71 result = --(*pTarget);
72 epicsAtomicUnlock ( & key );
77 #ifndef EPICS_ATOMIC_DECR_SIZET
83 epicsAtomicLock ( & key );
84 result = --(*pTarget);
85 epicsAtomicUnlock ( & key );
93 #ifndef EPICS_ATOMIC_ADD_INTT
99 epicsAtomicLock ( & key );
100 result = *pTarget += delta;
101 epicsAtomicUnlock ( & key );
106 #ifndef EPICS_ATOMIC_ADD_SIZET
112 epicsAtomicLock ( & key );
113 result = *pTarget += delta;
114 epicsAtomicUnlock ( & key );
119 #ifndef EPICS_ATOMIC_SUB_SIZET
125 epicsAtomicLock ( & key );
126 result = *pTarget -= delta;
127 epicsAtomicUnlock ( & key );
135 #ifndef EPICS_ATOMIC_SET_INTT
143 #ifndef EPICS_ATOMIC_SET_SIZET
151 #ifndef EPICS_ATOMIC_SET_PTRT
163 #ifndef EPICS_ATOMIC_GET_INTT
171 #ifndef EPICS_ATOMIC_GET_SIZET
179 #ifndef EPICS_ATOMIC_GET_PTRT
191 #ifndef EPICS_ATOMIC_CAS_INTT
197 epicsAtomicLock ( & key );
199 if ( cur == oldval ) {
202 epicsAtomicUnlock ( & key );
207 #ifndef EPICS_ATOMIC_CAS_SIZET
209 size_t oldval,
size_t newval )
214 epicsAtomicLock ( & key );
216 if ( cur == oldval ) {
219 epicsAtomicUnlock ( & key );
224 #ifndef EPICS_ATOMIC_CAS_PTRT
232 epicsAtomicLock ( & key );
234 if ( cur == oldval ) {
237 epicsAtomicUnlock ( & key );
EPICS_ATOMIC_INLINE EpicsAtomicPtrT epicsAtomicGetPtrT(const EpicsAtomicPtrT *pTarget)
atomically load and return pointer value
EPICS_ATOMIC_INLINE int epicsAtomicIncrIntT(int *pTarget)
atomic increment on int value
EPICS_ATOMIC_INLINE int epicsAtomicDecrIntT(int *pTarget)
atomic decrement on int value
EPICS_ATOMIC_INLINE int epicsAtomicGetIntT(const int *pTarget)
atomically load and return int value
EPICS_ATOMIC_INLINE size_t epicsAtomicAddSizeT(size_t *pTarget, size_t delta)
atomic addition on size_t value
EPICS_ATOMIC_INLINE void epicsAtomicSetIntT(int *pTarget, int newValue)
atomically assign int value to variable
EPICS_ATOMIC_INLINE int epicsAtomicAddIntT(int *pTarget, int delta)
atomic addition on int value
EPICS_ATOMIC_INLINE int epicsAtomicCmpAndSwapIntT(int *pTarget, int oldVal, int newVal)
atomically compare int value with expected and if equal swap with new value
EPICS_ATOMIC_INLINE size_t epicsAtomicSubSizeT(size_t *pTarget, size_t delta)
atomic subtraction on size_t value
EPICS_ATOMIC_INLINE void epicsAtomicSetSizeT(size_t *pTarget, size_t newValue)
atomically assign size_t value to variable
EPICS_ATOMIC_INLINE void epicsAtomicSetPtrT(EpicsAtomicPtrT *pTarget, EpicsAtomicPtrT newValue)
atomically assign pointer value to variable
EPICS_ATOMIC_INLINE void epicsAtomicReadMemoryBarrier(void)
load target into cache
EPICS_ATOMIC_INLINE size_t epicsAtomicCmpAndSwapSizeT(size_t *pTarget, size_t oldVal, size_t newVal)
atomically compare size_t value with expected and if equal swap with new value
EPICS_ATOMIC_INLINE size_t epicsAtomicGetSizeT(const size_t *pTarget)
atomically load and return size_t value
EPICS_ATOMIC_INLINE void epicsAtomicWriteMemoryBarrier(void)
push cache version of target into target
EPICS_ATOMIC_INLINE size_t epicsAtomicIncrSizeT(size_t *pTarget)
atomic increment on size_t value
EPICS_ATOMIC_INLINE EpicsAtomicPtrT epicsAtomicCmpAndSwapPtrT(EpicsAtomicPtrT *pTarget, EpicsAtomicPtrT oldVal, EpicsAtomicPtrT newVal)
atomically compare int value with expected and if equal swap with new value
EPICS_ATOMIC_INLINE size_t epicsAtomicDecrSizeT(size_t *pTarget)
atomic decrement on size_t value