gpt4 book ai didi

C++ 等价于 Java 的 BlockingQueue

转载 作者:IT老高 更新时间:2023-10-28 12:53:10 26 4
gpt4 key购买 nike

我正在将一些 Java 代码移植到 C++,其中一个特定部分使用 BlockingQueue 将消息从多个生产者传递到单个消费者。

如果您不熟悉 Java BlockingQueue 是什么,它只是一个具有硬容量的队列,它向队列中的 put() 和 take() 公开线程安全方法。如果队列已满,put() 阻塞,如果队列为空,则 take() 阻塞。此外,还提供了这些方法的超时敏感版本。

超时与我的用例相关,因此提供这些超时的建议是理想的。如果没有,我可以自己编写一些代码。

我用谷歌搜索并快速浏览了 Boost 库,但没有找到类似的东西。也许我在这里是盲人......但是有人知道一个好的推荐吗?

谢谢!

最佳答案

它不是固定大小,也不支持超时,但这是我最近使用 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;
}
};

扩展和使用定时等待弹出应该是微不足道的。我没有这样做的主要原因是我对到目前为止所想到的界面选择不满意。

关于C++ 等价于 Java 的 BlockingQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12805041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com