Furrent
sharing_queue.hpp
Go to the documentation of this file.
1 
13 #pragma once
14 
15 #include <condition_variable>
16 #include <functional>
17 #include <mutex>
18 #include <optional>
19 #include <policy/queue.hpp>
20 
21 namespace fur::mt {
22 
25 template <typename T>
26 class SharedQueue {
28  policy::Queue<T> _work;
29 
31  mutable std::mutex _mutex;
33  mutable std::condition_variable _new_work_available;
35  mutable std::condition_variable _all_work_dispatched;
37  bool _skip_waiting;
38 
39  public:
40  // Error are the same of the queue
41  using Error = typename policy::Queue<T>::Error;
43 
44  // Function used to mutate the internal collection
46 
47  public:
48  SharedQueue();
49 
52  [[nodiscard]] Result try_extract(const policy::IPolicy<T>& policy);
53 
56  void insert(T&& work);
57 
60  template <typename... Args>
61  void emplace(Args&&... args);
62 
65  void mutate(MutateFn mutation);
66 
68  void force_wakeup();
69 
71  void wait_work() const;
72 
74  void wait_empty() const;
75 
78  void begin_skip_waiting();
79 };
80 
81 } // namespace fur::mt
82 
83 #include <mt/sharing_queue.inl>
fur::policy::Queue
Special queue that allows the extraction of item using custom policies.
Definition: queue.hpp:23
fur::mt::SharedQueue::wait_empty
void wait_empty() const
Wait for the queue to be empty.
Definition: sharing_queue.inl:57
fur::mt::SharedQueue::insert
void insert(T &&work)
Definition: sharing_queue.inl:24
sharing_queue.inl
fur::mt::SharedQueue::try_extract
Result try_extract(const policy::IPolicy< T > &policy)
Definition: sharing_queue.inl:9
fur::util::Result
Used to handle errors without using exceptions.
Definition: result.hpp:18
fur::mt
Definition: group.cpp:3
fur::mt::SharedQueue< fur::PieceTask >::MutateFn
typename policy::Queue< fur::PieceTask >::MutateFn MutateFn
Definition: sharing_queue.hpp:45
fur::policy::Queue::Error
Error
All possible error that can occur.
Definition: queue.hpp:29
queue.hpp
fur::mt::SharedQueue::begin_skip_waiting
void begin_skip_waiting()
Definition: sharing_queue.inl:75
fur::policy::Queue::MutateFn
std::function< bool(T &)> MutateFn
Definition: queue.hpp:41
fur::mt::SharedQueue::force_wakeup
void force_wakeup()
Wake up all waiting threads.
Definition: sharing_queue.inl:43
fur::mt::SharedQueue< fur::PieceTask >::Error
typename policy::Queue< fur::PieceTask >::Error Error
Definition: sharing_queue.hpp:41
fur::mt::SharedQueue::mutate
void mutate(MutateFn mutation)
Definition: sharing_queue.inl:66
fur::mt::SharedQueue::wait_work
void wait_work() const
Wait for a new item in the queue.
Definition: sharing_queue.inl:48
fur::mt::SharedQueue::emplace
void emplace(Args &&... args)
Definition: sharing_queue.inl:34
fur::policy::IPolicy
Definition: policy.hpp:19
fur::mt::SharedQueue
Definition: sharing_queue.hpp:26
fur::mt::SharedQueue::SharedQueue
SharedQueue()
Definition: sharing_queue.inl:6