// C++ Includes #include #include #include #include #include namespace utils { template class ThreadSafeQueue { private: std::queue _queue; std::mutex _mutex; std::condition_variable _cv; public: void push(T value) { { std::lock_guard lock(_mutex); _queue.push(std::move(value)); } _cv.notify_one(); } T wait_and_pop() { std::unique_lock lock(_mutex); _cv.wait(lock, [&] { return !_queue.empty(); }); T val = std::move(_queue.front()); _queue.pop(); return val; } }; } // End utils namespace