1 #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED 2 #define BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED 3 4 // MS compatible compilers support #pragma once 5 6 #if defined(_MSC_VER) && (_MSC_VER >= 1020) 7 # pragma once 8 #endif 9 10 // 11 // boost/detail/spinlock.hpp 12 // 13 // Copyright (c) 2008 Peter Dimov 14 // 15 // Distributed under the Boost Software License, Version 1.0. 16 // See accompanying file LICENSE_1_0.txt or copy at 17 // http://www.boost.org/LICENSE_1_0.txt) 18 // 19 // struct spinlock 20 // { 21 // void lock(); 22 // bool try_lock(); 23 // void unlock(); 24 // 25 // class scoped_lock; 26 // }; 27 // 28 // #define BOOST_DETAIL_SPINLOCK_INIT <unspecified> 29 // 30 31 #include <boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp> 32 #include <boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp> 33 #include <boost/config.hpp> 34 35 #if defined( BOOST_SP_USE_STD_ATOMIC ) 36 # include <boost/smart_ptr/detail/spinlock_std_atomic.hpp> 37 38 #elif defined( BOOST_SP_USE_PTHREADS ) 39 # include <boost/smart_ptr/detail/spinlock_pt.hpp> 40 41 #elif defined( BOOST_SP_HAS_GCC_INTRINSICS ) 42 # include <boost/smart_ptr/detail/spinlock_gcc_atomic.hpp> 43 44 #elif !defined( BOOST_NO_CXX11_HDR_ATOMIC ) 45 # include <boost/smart_ptr/detail/spinlock_std_atomic.hpp> 46 47 #elif defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ ) 48 # include <boost/smart_ptr/detail/spinlock_gcc_arm.hpp> 49 50 #elif defined( BOOST_SP_HAS_SYNC_INTRINSICS ) 51 # include <boost/smart_ptr/detail/spinlock_sync.hpp> 52 53 #elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) 54 # include <boost/smart_ptr/detail/spinlock_w32.hpp> 55 56 #elif defined(BOOST_HAS_PTHREADS) 57 # include <boost/smart_ptr/detail/spinlock_pt.hpp> 58 59 #elif !defined(BOOST_HAS_THREADS) 60 # include <boost/smart_ptr/detail/spinlock_nt.hpp> 61 62 #else 63 # error Unrecognized threading platform 64 #endif 65 66 #endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED 67