diff --git a/core/inc/ThreadSafeQueue.h b/core/inc/ThreadSafeQueue.h new file mode 100644 index 0000000..50b3d61 --- /dev/null +++ b/core/inc/ThreadSafeQueue.h @@ -0,0 +1,46 @@ +#include +#include +#include + +namespace MBFT +{ + template + class ThreadSafeQueue + { + private: + std::queue queue; + + std::mutex m; + std::condition_variable cv; + public: + void push(T item); + T pop(void); + }; +} + +template +void MBFT::ThreadSafeQueue::push(T item) +{ + { + std::lock_guard l(m); + queue.push(item); + } + + cv.notify_one(); +} + +template +T MBFT::ThreadSafeQueue::pop(void) +{ + std::unique_lock l(m); + + while (!queue.size()) + { + cv.wait(l); + } + + T v = queue.front(); + queue.pop(); + + return v; +}