#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; }