EchoMap
2026-07-25 6d3977c
An experimental cross-platform digital signal processing application for sound-source localisation.
Toggle main menu visibility
Loading...
Searching...
No Matches
ThreadSafeQueue.hpp
Go to the documentation of this file.
1
7
8
#ifndef ECHOMAP_THREADSAFEQUEUE_HPP
9
#define ECHOMAP_THREADSAFEQUEUE_HPP
10
11
#include <
condition_variable
>
12
#include <
deque
>
13
#include <
mutex
>
14
#include <
optional
>
15
16
namespace
echomap
17
{
18
27
template
<
class
ValueT>
28
requires
std::move_constructible<ValueT>
29
class
ThreadSafeQueue
30
{
31
public
:
37
void
produce
(
38
ValueT value
39
)
40
{
41
std::scoped_lock
lock(mutex);
42
queue.push_back(std::move(value));
43
cv.notify_one();
44
}
45
53
std::optional<ValueT>
try_consume
()
54
{
55
std::scoped_lock
lock(mutex);
56
57
if
(!queue.empty()) {
58
auto
value = std::move(queue.front());
59
queue.pop_front();
60
return
value;
61
}
62
63
return
std::nullopt;
64
}
65
75
std::optional<ValueT>
wait_consume
(
76
std::stop_token
stop_token
77
)
78
{
79
std::unique_lock
lock(mutex);
80
cv.wait(lock, stop_token, [
this
] {
81
return
!queue.empty();
82
});
83
84
if
(queue.empty())
85
return
std::nullopt;
86
87
auto
value = std::move(queue.front());
88
queue.pop_front();
89
return
value;
90
}
91
97
[[nodiscard]]
bool
empty
()
const
98
{
99
std::scoped_lock
lock(mutex);
100
return
queue.empty();
101
}
102
106
void
clear
()
107
{
108
std::scoped_lock
lock(mutex);
109
queue.clear();
110
}
111
112
private
:
113
mutable
std::mutex
mutex;
114
std::condition_variable_any
cv;
115
std::deque<ValueT>
queue;
116
};
117
118
}
// namespace echomap
119
120
#endif
// ECHOMAP_THREADSAFEQUEUE_HPP
echomap::ThreadSafeQueue
Provides a straightforward thread-safe double-ended queue implementation.
Definition
ThreadSafeQueue.hpp:30
echomap::ThreadSafeQueue::produce
void produce(ValueT value)
Enqueue a value.
Definition
ThreadSafeQueue.hpp:37
echomap::ThreadSafeQueue::clear
void clear()
Empties the queue.
Definition
ThreadSafeQueue.hpp:106
echomap::ThreadSafeQueue::wait_consume
std::optional< ValueT > wait_consume(std::stop_token stop_token)
Attempt to dequeue a value.
Definition
ThreadSafeQueue.hpp:75
echomap::ThreadSafeQueue::try_consume
std::optional< ValueT > try_consume()
Attempt to dequeue a value.
Definition
ThreadSafeQueue.hpp:53
echomap::ThreadSafeQueue::empty
bool empty() const
Checks the state of the queue.
Definition
ThreadSafeQueue.hpp:97
std::condition_variable_any
condition_variable
deque
mutex
echomap
The main EchoMap outermost namespace for all non-exported symbols.
Definition
ActionController.hpp:20
optional
std::scoped_lock
std::stop_token
std::unique_lock
src
async
ThreadSafeQueue.hpp
Generated by
1.17.0