]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/fiber/include/boost/fiber/algo/round_robin.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / fiber / include / boost / fiber / algo / round_robin.hpp
CommitLineData
7c673cae
FG
1// Copyright Oliver Kowalke 2013.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at
4// http://www.boost.org/LICENSE_1_0.txt)
5
6#ifndef BOOST_FIBERS_ALGO_ROUND_ROBIN_H
7#define BOOST_FIBERS_ALGO_ROUND_ROBIN_H
8
9#include <condition_variable>
10#include <chrono>
11#include <mutex>
12
13#include <boost/config.hpp>
14
15#include <boost/fiber/algo/algorithm.hpp>
16#include <boost/fiber/context.hpp>
17#include <boost/fiber/detail/config.hpp>
18#include <boost/fiber/scheduler.hpp>
19
20#ifdef BOOST_HAS_ABI_HEADERS
21# include BOOST_ABI_PREFIX
22#endif
23
24#ifdef _MSC_VER
25# pragma warning(push)
26# pragma warning(disable:4251)
27#endif
28
29namespace boost {
30namespace fibers {
31namespace algo {
32
33class BOOST_FIBERS_DECL round_robin : public algorithm {
34private:
35 typedef scheduler::ready_queue_t rqueue_t;
36
37 rqueue_t rqueue_{};
38 std::mutex mtx_{};
39 std::condition_variable cnd_{};
40 bool flag_{ false };
41
42public:
43 round_robin() = default;
44
45 round_robin( round_robin const&) = delete;
46 round_robin & operator=( round_robin const&) = delete;
47
48 virtual void awakened( context *) noexcept;
49
50 virtual context * pick_next() noexcept;
51
52 virtual bool has_ready_fibers() const noexcept;
53
54 virtual void suspend_until( std::chrono::steady_clock::time_point const&) noexcept;
55
56 virtual void notify() noexcept;
57};
58
59}}}
60
61#ifdef _MSC_VER
62# pragma warning(pop)
63#endif
64
65#ifdef BOOST_HAS_ABI_HEADERS
66# include BOOST_ABI_SUFFIX
67#endif
68
69#endif // BOOST_FIBERS_ALGO_ROUND_ROBIN_H