#ifndef CHANNEL_HPP #define CHANNEL_HPP #include #include #include template class channel { private: std::list queue; std::mutex m; std::condition_variable cv; public: void put(const item &i) { std::unique_lock lock(m); queue.push_back(i); cv.notify_one(); } void put_front(const item &i) { std::unique_lock lock(m); queue.push_front(i); cv.notify_one(); } item get() { std::unique_lock lock(m); cv.wait(lock, [&](){ return !queue.empty(); }); item result = queue.front(); queue.pop_front(); return result; } }; #endif