My Project
 
Loading...
Searching...
No Matches
ThreadSafeQueue.hh
Go to the documentation of this file.
1// C++ Includes
2#include <queue>
3#include <thread>
4#include <functional>
5#include <mutex>
6#include <condition_variable>
7
8namespace utils {
9
10template<typename T>
12private:
13 std::queue<T> _queue;
14 std::mutex _mutex;
15 std::condition_variable _cv;
16
17public:
18 void push(T value) {
19
20 {
21 std::lock_guard<std::mutex> lock(_mutex);
22 _queue.push(std::move(value));
23 }
24 _cv.notify_one();
25 }
26
28 std::unique_lock<std::mutex> lock(_mutex);
29 _cv.wait(lock, [&] { return !_queue.empty(); });
30 T val = std::move(_queue.front());
31 _queue.pop();
32 return val;
33 }
34};
35} // End utils namespace
Definition ThreadSafeQueue.hh:11
void push(T value)
Definition ThreadSafeQueue.hh:18
T wait_and_pop()
Definition ThreadSafeQueue.hh:27
std::mutex _mutex
Definition ThreadSafeQueue.hh:14
std::queue< T > _queue
Definition ThreadSafeQueue.hh:13
std::condition_variable _cv
Definition ThreadSafeQueue.hh:15
Definition ThreadPool.cc:11