SPH
ConcurrentQueue.h
Go to the documentation of this file.
1 #pragma once
2 
6 
8 #include <queue>
9 #include <mutex>
10 
12 
14 
15 template <typename Type>
17 private:
18  std::queue<Type> queue;
19 
20  std::mutex mutex;
21 
22 public:
23  ConcurrentQueue() = default;
24 
26  template <typename T>
27  void push(T&& value) {
28  std::unique_lock<std::mutex> lock(mutex);
29  queue.push(std::forward<T>(value));
30  }
31 
35  std::unique_lock<std::mutex> lock(mutex);
36  if (queue.empty()) {
37  return NOTHING;
38  }
39  Type value = queue.front();
40  queue.pop();
41  return value;
42  }
43 
45  bool empty() {
46  std::unique_lock<std::mutex> lock(mutex);
47  return queue.empty();
48  }
49 };
50 
NAMESPACE_SPH_BEGIN
Definition: BarnesHut.cpp:13
#define NAMESPACE_SPH_END
Definition: Object.h:12
Wrapper of type value of which may or may not be present.
const NothingType NOTHING
Definition: Optional.h:16
ConcurrentQueue()=default
Optional< Type > pop()
void push(T &&value)
Pushes the element to the back of the queue. This is a thread-safe operation.
bool empty()
Checks whether the queue is empty. This is a thread-safe operation.
Wrapper of type value of which may or may not be present.
Definition: Optional.h:23