17 #ifndef epicsAtomicDefault_h
18 #define epicsAtomicDefault_h
35 #ifndef EPICS_ATOMIC_INCR_INTT
36 EPICS_ATOMIC_INLINE
int epicsAtomicIncrIntT (
int * pTarget )
41 epicsAtomicLock ( & key );
42 result = ++(*pTarget);
43 epicsAtomicUnlock ( & key );
48 #ifndef EPICS_ATOMIC_INCR_SIZET
49 EPICS_ATOMIC_INLINE
size_t epicsAtomicIncrSizeT (
size_t * pTarget )
54 epicsAtomicLock ( & key );
55 result = ++(*pTarget);
56 epicsAtomicUnlock ( & key );
64 #ifndef EPICS_ATOMIC_DECR_INTT
65 EPICS_ATOMIC_INLINE
int epicsAtomicDecrIntT (
int * pTarget )
70 epicsAtomicLock ( & key );
71 result = --(*pTarget);
72 epicsAtomicUnlock ( & key );
77 #ifndef EPICS_ATOMIC_DECR_SIZET
78 EPICS_ATOMIC_INLINE
size_t epicsAtomicDecrSizeT (
size_t * pTarget )
83 epicsAtomicLock ( & key );
84 result = --(*pTarget);
85 epicsAtomicUnlock ( & key );
93 #ifndef EPICS_ATOMIC_ADD_INTT
94 EPICS_ATOMIC_INLINE
int epicsAtomicAddIntT (
int * pTarget,
int delta )
99 epicsAtomicLock ( & key );
100 result = *pTarget += delta;
101 epicsAtomicUnlock ( & key );
106 #ifndef EPICS_ATOMIC_ADD_SIZET
107 EPICS_ATOMIC_INLINE
size_t epicsAtomicAddSizeT (
size_t * pTarget,
size_t delta )
112 epicsAtomicLock ( & key );
113 result = *pTarget += delta;
114 epicsAtomicUnlock ( & key );
119 #ifndef EPICS_ATOMIC_SUB_SIZET
120 EPICS_ATOMIC_INLINE
size_t epicsAtomicSubSizeT (
size_t * pTarget,
size_t delta )
125 epicsAtomicLock ( & key );
126 result = *pTarget -= delta;
127 epicsAtomicUnlock ( & key );
135 #ifndef EPICS_ATOMIC_SET_INTT
136 EPICS_ATOMIC_INLINE
void epicsAtomicSetIntT (
int * pTarget,
int newVal )
139 epicsAtomicWriteMemoryBarrier ();
143 #ifndef EPICS_ATOMIC_SET_SIZET
144 EPICS_ATOMIC_INLINE
void epicsAtomicSetSizeT (
size_t * pTarget,
size_t newVal )
147 epicsAtomicWriteMemoryBarrier ();
151 #ifndef EPICS_ATOMIC_SET_PTRT
152 EPICS_ATOMIC_INLINE
void epicsAtomicSetPtrT ( EpicsAtomicPtrT * pTarget,
153 EpicsAtomicPtrT newVal )
156 epicsAtomicWriteMemoryBarrier ();
163 #ifndef EPICS_ATOMIC_GET_INTT
164 EPICS_ATOMIC_INLINE
int epicsAtomicGetIntT (
const int * pTarget )
166 epicsAtomicReadMemoryBarrier ();
171 #ifndef EPICS_ATOMIC_GET_SIZET
172 EPICS_ATOMIC_INLINE
size_t epicsAtomicGetSizeT (
const size_t * pTarget )
174 epicsAtomicReadMemoryBarrier ();
179 #ifndef EPICS_ATOMIC_GET_PTRT
180 EPICS_ATOMIC_INLINE EpicsAtomicPtrT
181 epicsAtomicGetPtrT (
const EpicsAtomicPtrT * pTarget )
183 epicsAtomicReadMemoryBarrier ();
191 #ifndef EPICS_ATOMIC_CAS_INTT
192 EPICS_ATOMIC_INLINE
int epicsAtomicCmpAndSwapIntT (
int * pTarget,
int oldval,
int newval )
197 epicsAtomicLock ( & key );
199 if ( cur == oldval ) {
202 epicsAtomicUnlock ( & key );
207 #ifndef EPICS_ATOMIC_CAS_SIZET
208 EPICS_ATOMIC_INLINE
size_t epicsAtomicCmpAndSwapSizeT (
size_t * pTarget,
209 size_t oldval,
size_t newval )
214 epicsAtomicLock ( & key );
216 if ( cur == oldval ) {
219 epicsAtomicUnlock ( & key );
224 #ifndef EPICS_ATOMIC_CAS_PTRT
225 EPICS_ATOMIC_INLINE EpicsAtomicPtrT epicsAtomicCmpAndSwapPtrT (
226 EpicsAtomicPtrT * pTarget,
227 EpicsAtomicPtrT oldval, EpicsAtomicPtrT newval )
232 epicsAtomicLock ( & key );
234 if ( cur == oldval ) {
237 epicsAtomicUnlock ( & key );