gpt4 book ai didi

c++ - 基本的 C++ 多线程

转载 作者:行者123 更新时间:2023-11-28 03:18:08 25 4
gpt4 key购买 nike

我正处于开发的设计阶段,正在考虑在 C++ 中使用多线程来实现某些功能。我熟悉多线程的基础知识,但想让其他人接受我的想法。我还没有选择多线程库(倾向于 Boost),但我的问题可能与所选库无关。

基本上我会有一个类(我们称之为 CommandGenerator),它在 while 循环中执行(直到终止)并检查由另一个软件填充的命令消息队列。每次 CommandGenerator 从队列中获取消息时,我都希望它生成一个线程,该线程在后台执行并处理刚刚从队列中提取的数据。同时,我希望 CommandGenerator 继续运行并再次绕过 while 循环并提取任何新消息并再次生成更多线程。这在概念上可能吗?我可以继续生成线程并让它们在后台运行直到它们完成,同时代码继续循环并检查队列吗? CommandGenerator 不需要控制线程。一旦创建,它们将能够独立执行并保证终止,但可能需要一分钟才能完成执行(它们在执行前等待从队列中拉出的消息中指定的一定时间)。

欢迎任何意见。

最佳答案

你想做的是所谓的“生产者-消费者”模式。

我强烈建议不要为收到的每条消息都创建一个新线程:如果您这样做并且一次收到太多消息,您可能会阻塞机器。

取而代之的是,让固定数量的消费者线程读取消息队列,并让它们一次处理一条消息。如果一次收到的消息过多,它们将存储在队列中,等待处理。

由于在获取消息和实际处理消息之间存在延迟,恕我直言,解决方案不是为每条消息生成一个线程,而是增加消费者线程的数量。这样您就可以控制资源的使用。您究竟需要多少个线程完全取决于您的应用程序,您必须自己弄清楚。

至于实现,如果你使用 C++11,你只需要 std::thread/std::mutex 和 std::condition_variable。如果您使用 C++03,那么 boost 具有等效的类。

关于c++ - 基本的 C++ 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16215262/

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