我想限制给定作业的线程数。 以下是我尝试这样做的示例代码:
#DEFINE MAX_THREAD_COUNT 5
随后:
void MyClass::a_method() {
unsigned thread_count = 0;
std::vector<std::thread> jobs;
std::vector<AnObject> collection;
for(auto& c : collection) {
if(thread_count >= MAX_THREAD_COUNT) {
for(auto& j : jobs) {
if(j.joinable()) {
j.join();
thread_count--;
}
}
}
thread_count++;
jobs.push_back(std::thread([=] { this->a_long_job(c); }));
}
for(auto& j : jobs) {
if(j.joinable()) {
j.join();
}
}
}
问题是,有时this->a_long_job
不会一直调用,我通过在方法中打印一行并打印collection
中包含的元素数来检查这一点。
另一个可行但不优雅的想法是在max_thread
个帖子中c/max_thread
调用this->a_long_job(c)
个帖子。
我认为我不需要为此应用程序提供线程池,因为只有这种方法才需要。
注意: