]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/fiber/detail/spinlock.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / fiber / detail / spinlock.hpp
CommitLineData
b32b8144
FG
1
2// Copyright Oliver Kowalke 2013.
3// Distributed under the Boost Software License, Version 1.0.
4// (See accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt)
6
7#ifndef BOOST_FIBERS_SPINLOCK_H
8#define BOOST_FIBERS_SPINLOCK_H
9
10#include <boost/config.hpp>
11
12#include <boost/fiber/detail/config.hpp>
13
14#if !defined(BOOST_FIBERS_NO_ATOMICS)
15# include <mutex>
16# include <boost/fiber/detail/spinlock_ttas_adaptive.hpp>
17# include <boost/fiber/detail/spinlock_ttas.hpp>
18# if defined(BOOST_FIBERS_HAS_FUTEX)
19# include <boost/fiber/detail/spinlock_ttas_adaptive_futex.hpp>
20# include <boost/fiber/detail/spinlock_ttas_futex.hpp>
21# endif
22# if defined(BOOST_USE_TSX)
23# include <boost/fiber/detail/spinlock_rtm.hpp>
24# endif
25#endif
26
27#ifdef BOOST_HAS_ABI_HEADERS
28# include BOOST_ABI_PREFIX
29#endif
30
31namespace boost {
32namespace fibers {
33namespace detail {
34
35#if defined(BOOST_FIBERS_NO_ATOMICS)
36struct spinlock {
37 constexpr spinlock() noexcept {}
38 void lock() noexcept {}
39 void unlock() noexcept {}
40};
41
42struct spinlock_lock {
43 constexpr spinlock_lock( spinlock &) noexcept {}
44 void lock() noexcept {}
45 void unlock() noexcept {}
46};
47#else
48# if defined(BOOST_FIBERS_SPINLOCK_STD_MUTEX)
49using spinlock = std::mutex;
50# elif defined(BOOST_FIBERS_SPINLOCK_TTAS_FUTEX)
51# if defined(BOOST_USE_TSX)
52using spinlock = spinlock_rtm< spinlock_ttas_futex >;
53# else
54using spinlock = spinlock_ttas_futex;
55# endif
56# elif defined(BOOST_FIBERS_SPINLOCK_TTAS_ADAPTIVE_FUTEX)
57# if defined(BOOST_USE_TSX)
58using spinlock = spinlock_rtm< spinlock_ttas_adaptive_futex >;
59# else
60using spinlock = spinlock_ttas_adaptive_futex;
61# endif
62# elif defined(BOOST_FIBERS_SPINLOCK_TTAS_ADAPTIVE)
63# if defined(BOOST_USE_TSX)
64using spinlock = spinlock_rtm< spinlock_ttas_adaptive >;
65# else
66using spinlock = spinlock_ttas_adaptive;
67# endif
68# else
69# if defined(BOOST_USE_TSX)
70using spinlock = spinlock_rtm< spinlock_ttas >;
71# else
72using spinlock = spinlock_ttas;
73# endif
74# endif
75using spinlock_lock = std::unique_lock< spinlock >;
76#endif
77
78}}}
79
80#ifdef BOOST_HAS_ABI_HEADERS
81# include BOOST_ABI_SUFFIX
82#endif
83
84#endif // BOOST_FIBERS_SPINLOCK_H