]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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/config.hpp> | |
32 | #include <boost/smart_ptr/detail/sp_has_sync.hpp> | |
33 | ||
34 | #if defined( BOOST_SP_USE_STD_ATOMIC ) | |
35 | # if !defined( __clang__ ) | |
36 | # include <boost/smart_ptr/detail/spinlock_std_atomic.hpp> | |
37 | # else | |
38 | // Clang (at least up to 3.4) can't compile spinlock_pool when | |
39 | // using std::atomic, so substitute the __sync implementation instead. | |
40 | # include <boost/smart_ptr/detail/spinlock_sync.hpp> | |
41 | # endif | |
42 | ||
43 | #elif defined( BOOST_SP_USE_PTHREADS ) | |
44 | # include <boost/smart_ptr/detail/spinlock_pt.hpp> | |
45 | ||
46 | #elif !defined( BOOST_NO_CXX11_HDR_ATOMIC ) | |
47 | # include <boost/smart_ptr/detail/spinlock_std_atomic.hpp> | |
48 | ||
49 | #elif defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ ) | |
50 | # include <boost/smart_ptr/detail/spinlock_gcc_arm.hpp> | |
51 | ||
52 | #elif defined( BOOST_SP_HAS_SYNC ) | |
53 | # include <boost/smart_ptr/detail/spinlock_sync.hpp> | |
54 | ||
55 | #elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) | |
56 | # include <boost/smart_ptr/detail/spinlock_w32.hpp> | |
57 | ||
58 | #elif defined(BOOST_HAS_PTHREADS) | |
59 | # include <boost/smart_ptr/detail/spinlock_pt.hpp> | |
60 | ||
61 | #elif !defined(BOOST_HAS_THREADS) | |
62 | # include <boost/smart_ptr/detail/spinlock_nt.hpp> | |
63 | ||
64 | #else | |
65 | # error Unrecognized threading platform | |
66 | #endif | |
67 | ||
68 | #endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_HPP_INCLUDED |