diff --git a/include/boost/detail/interlocked.hpp b/include/boost/detail/interlocked.hpp index 4e497ba..0d504f5 100644 --- a/include/boost/detail/interlocked.hpp +++ b/include/boost/detail/interlocked.hpp @@ -27,6 +27,7 @@ # define BOOST_INTERLOCKED_DECREMENT ::InterlockedDecrement # define BOOST_INTERLOCKED_COMPARE_EXCHANGE ::InterlockedCompareExchange # define BOOST_INTERLOCKED_EXCHANGE ::InterlockedExchange +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER ::InterlockedCompareExchangePointer #elif defined( BOOST_MSVC ) || defined( BOOST_INTEL_WIN ) @@ -34,16 +35,19 @@ extern "C" long __cdecl _InterlockedIncrement( long volatile * ); extern "C" long __cdecl _InterlockedDecrement( long volatile * ); extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long ); extern "C" long __cdecl _InterlockedExchange( long volatile *, long); +extern "C" void* __cdecl _InterlockedCompareExchangePointer( void* volatile *, void*, void* ); # pragma intrinsic( _InterlockedIncrement ) # pragma intrinsic( _InterlockedDecrement ) # pragma intrinsic( _InterlockedCompareExchange ) # pragma intrinsic( _InterlockedExchange ) +# pragma intrinsic( _InterlockedCompareExchangePointer ) # define BOOST_INTERLOCKED_INCREMENT ::_InterlockedIncrement # define BOOST_INTERLOCKED_DECREMENT ::_InterlockedDecrement # define BOOST_INTERLOCKED_COMPARE_EXCHANGE ::_InterlockedCompareExchange # define BOOST_INTERLOCKED_EXCHANGE ::_InterlockedExchange +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER ::_InterlockedCompareExchangePointer #elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) @@ -57,6 +61,7 @@ extern "C" __declspec(dllimport) long __stdcall InterlockedIncrement( long volat extern "C" __declspec(dllimport) long __stdcall InterlockedDecrement( long volatile * ); extern "C" __declspec(dllimport) long __stdcall InterlockedCompareExchange( long volatile *, long, long ); extern "C" __declspec(dllimport) long __stdcall InterlockedExchange( long volatile *, long ); +extern "C" __declspec(dllimport) void* __stdcall InterlockedCompareExchangePointer( void* volatile *, void*, void* ); } // namespace detail @@ -66,6 +71,7 @@ extern "C" __declspec(dllimport) long __stdcall InterlockedExchange( long volati # define BOOST_INTERLOCKED_DECREMENT ::boost::detail::InterlockedDecrement # define BOOST_INTERLOCKED_COMPARE_EXCHANGE ::boost::detail::InterlockedCompareExchange # define BOOST_INTERLOCKED_EXCHANGE ::boost::detail::InterlockedExchange +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER ::boost::detail::InterlockedCompareExchangePointer #else @@ -73,4 +79,8 @@ extern "C" __declspec(dllimport) long __stdcall InterlockedExchange( long volati #endif +#define BOOST_INTERLOCKED_READ(x) BOOST_INTERLOCKED_COMPARE_EXCHANGE(x,0,0) +#define BOOST_INTERLOCKED_READ_POINTER(x) BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(x,0,0) + + #endif // #ifndef BOOST_DETAIL_INTERLOCKED_HPP_INCLUDED