From 6368ab745532d273775875f16a6053fb79586bc1 Mon Sep 17 00:00:00 2001 From: fireice-uk Date: Mon, 2 Jan 2017 12:51:13 +0000 Subject: First! --- thdq.hpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 thdq.hpp (limited to 'thdq.hpp') diff --git a/thdq.hpp b/thdq.hpp new file mode 100644 index 0000000..248c807 --- /dev/null +++ b/thdq.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include +#include +#include +#include + +template +class thdq +{ +public: + T pop() + { + std::unique_lock mlock(mutex_); + while (queue_.empty()) { cond_.wait(mlock); } + auto item = std::move(queue_.front()); + queue_.pop(); + return item; + } + + void pop(T& item) + { + std::unique_lock mlock(mutex_); + while (queue_.empty()) { cond_.wait(mlock); } + item = queue_.front(); + queue_.pop(); + } + + void push(const T& item) + { + std::unique_lock mlock(mutex_); + queue_.push(item); + mlock.unlock(); + cond_.notify_one(); + } + + void push(T&& item) + { + std::unique_lock mlock(mutex_); + queue_.push(std::move(item)); + mlock.unlock(); + cond_.notify_one(); + } + +private: + std::queue queue_; + std::mutex mutex_; + std::condition_variable cond_; +}; -- cgit v1.1