【问题标题】:Waiting loop alternative in c++ thread poolC ++线程池中的等待循环替代方案
【发布时间】:2021-01-04 17:11:52
【问题描述】:

我在我的程序中实现了一个简单的线程池,主线程设置数据并通知线程执行,然后循环等待它们完成。

while(true){

// set the data
....
// notify threads
...
while(n_done < num_threads){}        // wait in the while loop for threads to finish

}

每个线程大约需要 10-15 毫秒才能完成,直到那时主线程只是不断循环线程以完成消耗大量 cpu 使用。 是否有任何替代方法可以停止或休眠主线程执行,直到线程完成而没有循环。

【问题讨论】:

  • 我没有时间给出正确的答案,但请查看一些商业质量的线程池实现如何为提交到池的每个任务返回一个Future 对象。提交任务的调用者稍后可以使用Future 实例等待任务完成,并可能获得由任务计算的返回值。如果您的线程池返回期货,那么您的主线程可以在提交任务时首先将所有期货收集到一个列表中,然后它可以等待列表中的每个未来。

标签: c++ multithreading threadpool


【解决方案1】:

如果您想等待所有线程完成而不重用它们,您可以在最后的每个线程上使用join()

【讨论】:

  • 但是线程并没有结束,它们被一次又一次地使用。
猜你喜欢
  • 2013-01-23
  • 2020-03-21
  • 2012-11-02
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多