【问题标题】:C++ multithreading: managing threadsC++ 多线程:管理线程
【发布时间】:2016-12-12 11:50:09
【问题描述】:

我有一个包含 N 个作业的池,并且我希望有 M 个(= CPU 数量)线程的恒定负载。我如何在 C++ 中做到这一点?

我已经了解了 C++ 线程库的基础知识。最简单的方法是将 M 个作业排入队列并等待所有作业完成。然后排队另外 M 个工作。只要还有工作,就这样做。

只要每个作业/线程花费大致相同的时间,这种简单的方法就可以正常工作。如果不是这种情况,很容易发生一个长线程仍在工作而其他所有线程都完成的情况。因此,只加载了 M 个 CPU 中的一个。

所以我需要一种线程管理。我不必等待所有线程,而是必须不断检查有多少线程正在运行,并在必要时将一个新线程加入队列。

在 C++ 中是否已经实现了类似的东西?否则,实现这样一个管理器的最简单/最聪明的方法是什么?

【问题讨论】:

  • 阅读线程池,C++中有很多线程池
  • 您的问题有多种解决方案。其中之一是提供自我管理的线程,这很简单,当你的一个线程结束他的工作时,它只需要先不处理工作列表中的工作。您需要记住的一件事是为作业操作做一个关键部分。
  • 一开始就启动 N 个线程,让它们在整个应用程序中都保持运行。然后每个线程循环等待条件变量、信号量、有界缓冲区或队列以在其中处理项目。

标签: c++ multithreading


【解决方案1】:

所以我需要一种线程管理。我不必等待所有线程,而是必须不断检查有多少线程正在运行,并在必要时将一个新线程加入队列。

C++ 中是否已经实现了类似的东西?

有一个Task Scheduler in Intel Thread Building blocks library,它以高效的方式将用户任务负载平衡到可用 CPU 上。

【讨论】:

    猜你喜欢
    • 2013-04-11
    • 2011-01-10
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    相关资源
    最近更新 更多