gpt4 book ai didi

c++ - 一个生产者线程,多个消费者

转载 作者:行者123 更新时间:2023-11-30 02:36:30 26 4
gpt4 key购买 nike

我有一个生产者线程和几个消费者,每个消费者都有:自己的数据队列和唯一 ID。我使用 std::map 来识别线程的每个队列。

typedef std::map<int, std::queue<Task>> TaskMap;
TaskMap inputQueue;
TaskMap outputQueue;

每个消费者线程在他的队列中处理数据,如果队列为空,线程必须等待数据。如果我只想用一个线程来完成它,我可以将 std::condition_variable 与 std::unique_lock 一起使用,但我有几个消费者所以我需要几个 std::condition_variable,但我不能将它们保存在容器中(复制/赋值是删除)。所以我使用这样的代码

while(q.empty()) {
std::cout << "waiting...\n";
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}

其中 q 是对队列的引用。但是我怎样才能用更好的方式同步它呢?提前致谢。附言队列将始终有数据,最后的数据必须说“退出”。

最佳答案

因为每个消费者都有自己的队列,所有消费者只有一个生产者,所以它本质上是一个生产者一个消费者的场景。

换句话说,您没有在所有消费者之间共享一个队列。

关于c++ - 一个生产者线程,多个消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32606446/

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