Boost thread_group线程限制器

Boost thread_group thread limiter

我正在尝试随时将线程数限制为最大可用内核数。以下是合理的方法吗?有更好的选择吗?谢谢!

    boost::thread_group threads;
    iThreads = 0;

    for (int i = 0; i <  Utility::nIterations; i++)
    {

        threads.create_thread(
            boost::bind(&ScenarioInventory::BuildInventoryWorker, this,i));

        thread_limiter.lock();
        iThreads++;
        thread_limiter.unlock();

        while (iThreads > nCores)
            std::this_thread::sleep_for(std::chrono::milliseconds(1)); 

    }

threads.join_all();


void ScenarioInventory::BuildInventoryWorker(int i)
{
    //code code code....

    thread_limiter.lock();
    iThreads--;
    thread_limiter.unlock();
}

您可能正在寻找的是 thread_pool 任务队列。

有固定数量的线程阻塞队列。每当任务被推入队列时,工作线程就会收到信号(条件变量)并处理任务。

那样你

  • 没有(低效的)等待锁
  • 线程数不超过 "maximum"
  • 不必阻塞在推送任务的代码中
  • 不要每次都创建多余的线程

有关带有任务队列的线程池的两个不同演示,请参阅此答案: