如何限制标准库线程数?

时间:2017-08-25 10:16:14

标签: multithreading c++11

我想限制给定作业的线程数。 以下是我尝试这样做的示例代码:

 #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)个帖子。

我认为我不需要为此应用程序提供线程池,因为只有这种方法才需要。

注意:

  • 没有外部图书馆
  • C ++ 11及更进一步

0 个答案:

没有答案