Chris@16: #ifndef BOOST_THREAD_DETAIL_INTERLOCKED_READ_WIN32_HPP Chris@16: #define BOOST_THREAD_DETAIL_INTERLOCKED_READ_WIN32_HPP Chris@16: Chris@16: // interlocked_read_win32.hpp Chris@16: // Chris@16: // (C) Copyright 2005-8 Anthony Williams Chris@16: // (C) Copyright 2012 Vicente J. Botet Escriba Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: #ifdef BOOST_MSVC Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: namespace detail Chris@16: { Chris@101: // Since VS2005 volatile reads always acquire Chris@16: inline long interlocked_read_acquire(long volatile* x) BOOST_NOEXCEPT Chris@16: { Chris@16: long const res=*x; Chris@16: return res; Chris@16: } Chris@16: inline void* interlocked_read_acquire(void* volatile* x) BOOST_NOEXCEPT Chris@16: { Chris@16: void* const res=*x; Chris@16: return res; Chris@16: } Chris@16: Chris@101: // Since VS2005 volatile writes always release Chris@16: inline void interlocked_write_release(long volatile* x,long value) BOOST_NOEXCEPT Chris@16: { Chris@16: *x=value; Chris@16: } Chris@16: inline void interlocked_write_release(void* volatile* x,void* value) BOOST_NOEXCEPT Chris@16: { Chris@16: *x=value; Chris@16: } Chris@16: } Chris@16: } Chris@16: Chris@16: #else Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: namespace detail Chris@16: { Chris@16: inline long interlocked_read_acquire(long volatile* x) BOOST_NOEXCEPT Chris@16: { Chris@16: return BOOST_INTERLOCKED_COMPARE_EXCHANGE(x,0,0); Chris@16: } Chris@16: inline void* interlocked_read_acquire(void* volatile* x) BOOST_NOEXCEPT Chris@16: { Chris@16: return BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(x,0,0); Chris@16: } Chris@16: inline void interlocked_write_release(long volatile* x,long value) BOOST_NOEXCEPT Chris@16: { Chris@16: BOOST_INTERLOCKED_EXCHANGE(x,value); Chris@16: } Chris@16: inline void interlocked_write_release(void* volatile* x,void* value) BOOST_NOEXCEPT Chris@16: { Chris@16: BOOST_INTERLOCKED_EXCHANGE_POINTER(x,value); Chris@16: } Chris@16: } Chris@16: } Chris@16: Chris@16: #endif Chris@16: Chris@16: #include Chris@16: Chris@16: #endif