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