【发布时间】: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