C ++相当于Java的BlockingQueue
我正在将一些Java代码移植到C ++中,一个特定的部分使用BlockingQueue将来自许多生产者的消息传递给一个消费者。
如果您不熟悉Java BlockingQueue是什么,那么它就是一个具有硬容量的队列,它将公开线程安全的方法,从队列中放()和取()。 如果队列已满,则put()块;如果队列为空,则取()阻塞。 此外,还提供了这些方法的超时敏感版本。
超时与我的使用情况有关,所以提供这些的build议是理想的。 如果没有,我可以自己编码。
我search了很多,并快速浏览了Boost库,我没有发现这样的事情。 也许我在这里是盲目的…但是有谁知道一个好的build议?
谢谢!
它不是固定的大小,它不支持超时,但这是一个我最近使用C ++ 2011结构发布的队列的简单实现:
#include <mutex> #include <condition_variable> #include <deque> template <typename T> class queue { private: std::mutex d_mutex; std::condition_variable d_condition; std::deque<T> d_queue; public: void push(T const& value) { { std::unique_lock<std::mutex> lock(this->d_mutex); d_queue.push_front(value); } this->d_condition.notify_one(); } T pop() { std::unique_lock<std::mutex> lock(this->d_mutex); this->d_condition.wait(lock, [=]{ return !this->d_queue.empty(); }); T rc(std::move(this->d_queue.back())); this->d_queue.pop_back(); return rc; } };
延长使用定时等待popup应该是微不足道的。 我没有做到这一点的主要原因是,我不喜欢迄今为止我所想到的界面select。