/** * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER within this package. */ #ifndef _INTERLOCKAPI_H_ #define _INTERLOCKAPI_H_ #include #include #include #ifdef __cplusplus extern "C" { #endif #if !defined (NOWINBASEINTERLOCK) && !defined (_NTOS_) #if !defined (__x86_64__) && !defined (__ia64__) && !defined (__arm__) WINBASEAPI LONG WINAPI InterlockedIncrement (LONG volatile *lpAddend); WINBASEAPI LONG WINAPI InterlockedDecrement (LONG volatile *lpAddend); WINBASEAPI LONG WINAPI InterlockedExchange (LONG volatile *Target, LONG Value); WINBASEAPI LONG WINAPI InterlockedExchangeAdd (LONG volatile *Addend, LONG Value); WINBASEAPI LONG WINAPI InterlockedCompareExchange (LONG volatile *Destination, LONG Exchange, LONG Comperand); WINBASEAPI LONGLONG WINAPI InterlockedCompareExchange64 (LONGLONG volatile *Destination, LONGLONG Exchange, LONGLONG Comperand); #define InterlockedExchangePointer(Target, Value) (PVOID)InterlockedExchange ((PLONG) (Target),((LONG) (LONG_PTR) (Value))) #define InterlockedExchangePointerNoFence InterlockedExchangePointer #if defined(__MINGW_INTRIN_INLINE) && (defined(__GNUC__) && (__MINGW_GNUC_PREREQ(4, 9) || (__MINGW_GNUC_PREREQ(4, 8) && __GNUC_PATCHLEVEL__ >= 2))) __MINGW_INTRIN_INLINE LONG WINAPI InterlockedIncrement(LONG volatile *lpAddend) { return _InterlockedIncrement(lpAddend); } __MINGW_INTRIN_INLINE LONG WINAPI InterlockedDecrement(LONG volatile *lpAddend) { return _InterlockedDecrement(lpAddend); } __MINGW_INTRIN_INLINE LONG WINAPI InterlockedExchange(LONG volatile *Target, LONG Value) { return _InterlockedExchange(Target, Value); } __MINGW_INTRIN_INLINE LONG WINAPI InterlockedExchangeAdd(LONG volatile *Addend, LONG Value) { return _InterlockedExchangeAdd(Addend, Value); } __MINGW_INTRIN_INLINE LONG WINAPI InterlockedCompareExchange(LONG volatile *Destination, LONG Exchange, LONG Comperand) { return _InterlockedCompareExchange(Destination, Exchange, Comperand); } __MINGW_INTRIN_INLINE LONGLONG WINAPI InterlockedCompareExchange64(LONGLONG volatile *Destination, LONGLONG Exchange, LONGLONG Comperand) { return _InterlockedCompareExchange64(Destination, Exchange, Comperand); } #endif #endif #if defined (_SLIST_HEADER_) && !defined (_NTOSP_) WINBASEAPI VOID WINAPI InitializeSListHead (PSLIST_HEADER ListHead); WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPopEntrySList (PSLIST_HEADER ListHead); WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPushEntrySList (PSLIST_HEADER ListHead, PSLIST_ENTRY ListEntry); WINBASEAPI PSLIST_ENTRY WINAPI InterlockedFlushSList (PSLIST_HEADER ListHead); WINBASEAPI USHORT WINAPI QueryDepthSList (PSLIST_HEADER ListHead); #if NTDDI_VERSION >= 0x06020000 #define InterlockedPushListSList InterlockedPushListSListEx WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPushListSListEx (PSLIST_HEADER ListHead, PSLIST_ENTRY List, PSLIST_ENTRY ListEnd, ULONG Count); #endif #endif #endif #ifdef __cplusplus } #endif #endif