15 #ifndef ATOMICADJUST_H 16 #define ATOMICADJUST_H 18 #include "dtoolbase.h" 19 #include "selectThreadImpl.h" 21 #if defined(CPPPARSER) 25 typedef void *UnalignedPointer;
26 typedef UnalignedPointer Pointer;
29 #elif defined(THREAD_DUMMY_IMPL) || defined(THREAD_SIMPLE_IMPL) 31 #include "atomicAdjustDummyImpl.h" 34 #elif (defined(__i386__) || defined(_M_IX86)) && !defined(__APPLE__) 39 #include "atomicAdjustI386Impl.h" 47 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE 1 48 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE_PTR 1 50 #elif (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))) || (defined(__clang__) && (__clang_major__ >= 3)) 54 #include "atomicAdjustGccImpl.h" 57 #if (__GCC_ATOMIC_INT_LOCK_FREE + __GCC_ATOMIC_INT_LOCK_FREE) > 0 58 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE 1 60 #if __GCC_ATOMIC_POINTER_LOCK_FREE > 0 61 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE_PTR 1 64 #elif defined(THREAD_WIN32_IMPL) 66 #include "atomicAdjustWin32Impl.h" 69 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE 1 70 #define HAVE_ATOMIC_COMPARE_AND_EXCHANGE_PTR 1 72 #elif defined(THREAD_LINUX_IMPL) 74 #error Linux native threads are currently implemented only for i386; use Posix threads instead. 76 #elif defined(THREAD_POSIX_IMPL) 78 #include "atomicAdjustPosixImpl.h" A trivial implementation for atomic adjustments for systems that don't require multiprogramming, and therefore don't require special atomic operations.