Libftpp
A modern C++ library
thread_safe_queue.hpp
Go to the documentation of this file.
1 #ifndef THREAD_SAFE_QUEUE_HPP
2 #define THREAD_SAFE_QUEUE_HPP
3 
4 #include <mutex>
5 #include <queue>
22 template <typename TType>
24 {
25 private:
26  std::deque<TType> _queue;
27  std::mutex _mutex;
28 
29 public:
30  void push_back(const TType& newElement)
31  {
32  std::lock_guard<std::mutex> lock(_mutex);
33  _queue.push_back(newElement);
34  }
35 
36  void push_front(const TType& newElement)
37  {
38  std::lock_guard<std::mutex> lock(_mutex);
39  _queue.push_front(newElement);
40  }
41 
42  TType pop_back()
43  {
44  std::lock_guard<std::mutex> lock(_mutex);
45 
46  if (_queue.empty())
47  throw std::runtime_error("Trying to pop from an empty queue");
48 
49  TType value = _queue.back();
50  _queue.pop_back();
51  return value;
52  }
53 
54  TType pop_front()
55  {
56  std::lock_guard<std::mutex> lock(_mutex);
57 
58  if (_queue.empty())
59  throw std::runtime_error("Trying to pop from an empty queue");
60 
61  TType value = _queue.front();
62  _queue.pop_front();
63  return value;
64  }
65 };
66 #endif
Thread-Safe Queue.
void push_front(const TType &newElement)
void push_back(const TType &newElement)