【发布时间】:2016-12-12 11:50:09
【问题描述】:
我有一个包含 N 个作业的池,并且我希望有 M 个(= CPU 数量)线程的恒定负载。我如何在 C++ 中做到这一点?
我已经了解了 C++ 线程库的基础知识。最简单的方法是将 M 个作业排入队列并等待所有作业完成。然后排队另外 M 个工作。只要还有工作,就这样做。
只要每个作业/线程花费大致相同的时间,这种简单的方法就可以正常工作。如果不是这种情况,很容易发生一个长线程仍在工作而其他所有线程都完成的情况。因此,只加载了 M 个 CPU 中的一个。
所以我需要一种线程管理。我不必等待所有线程,而是必须不断检查有多少线程正在运行,并在必要时将一个新线程加入队列。
在 C++ 中是否已经实现了类似的东西?否则,实现这样一个管理器的最简单/最聪明的方法是什么?
【问题讨论】:
-
阅读线程池,C++中有很多线程池
-
您的问题有多种解决方案。其中之一是提供自我管理的线程,这很简单,当你的一个线程结束他的工作时,它只需要先不处理工作列表中的工作。您需要记住的一件事是为作业操作做一个关键部分。
-
一开始就启动 N 个线程,让它们在整个应用程序中都保持运行。然后每个线程循环等待条件变量、信号量、有界缓冲区或队列以在其中处理项目。
标签: c++ multithreading