-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paththread_safe_queue.hpp
More file actions
45 lines (35 loc) · 907 Bytes
/
thread_safe_queue.hpp
File metadata and controls
45 lines (35 loc) · 907 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#pragma once
#include <queue>
#include <mutex>
using std::queue;
using std::mutex;
using std::unique_lock;
using std::condition_variable;
template<typename T>
class thread_safe_queue {
public:
thread_safe_queue() = default;
thread_safe_queue(thread_safe_queue& queue) = delete;
thread_safe_queue(thread_safe_queue&& moveable_queue) {
unique_lock<mutex> queue_mutex_unique_lock(queue_mutex);
item_queue = move(moveable_queue.item_queue);
}
void enqueue(T item) {
unique_lock<mutex> queue_mutex_unique_lock(queue_mutex);
item_queue.push(item);
cond.notify_one();
};
T dequeue() {
unique_lock<mutex> queue_mutex_unique_lock(queue_mutex);
while (item_queue.empty()) {
cond.wait(queue_mutex_unique_lock);
}
T item_to_return = item_queue.front();
item_queue.pop();
return item_to_return;
};
private:
queue<T> item_queue;
mutex queue_mutex;
condition_variable cond;
};