【发布时间】:2020-01-31 02:46:13
【问题描述】:
我使用了一个稍微定制的 progschj 线程池实现版本 (https://github.com/progschj/ThreadPool)。到目前为止,它适用于我的用例,除了后面描述的那个。
我希望能够让池中的每个线程执行一次给定函数,例如让每个线程设置一些线程局部变量。
thread_pool.execute_all([] () { do some stuff; });
这个调用应该是阻塞的,等待池中的所有线程都执行完这个函数。
我试图修改线程的主循环来实现这一点,但我无法确保池中的每个线程都只执行一次给定的函数,并且主线程一直等待直到它们完成。
谁能提出这个功能的工作版本,或者给出如何实现这个功能的提示?
【问题讨论】:
-
thread_pool好像没有这样的功能。在问我们如何添加它?如果是这样,您要求我们为您修改库。这会使您的问题脱离本网站的主题。 -
是的,我实际上尝试将此功能添加到线程池中,但无法获得有效的解决方案。我希望有人能认为这是一个有趣的问题,并且至少可以给出关于如何制作它的一些提示(使用这个库或任何其他线程池实现)。
-
看来你得玩一下线程的
join方法。 -
join不是在等待线程停止吗?我不想停止线程,只等待它们每个都执行给定的函数。然后他们应该可以继续执行新任务。 -
出于好奇,您要解决什么问题?编写关心线程池工作人员身份的代码似乎有点可疑。您现在使用的
thread_pool实现是微不足道的,但如果您切换到更复杂的实现,那么您需要注意线程池在需求低时杀死工作人员并创建新的常见做法需求高涨时的工人。
标签: c++ multithreading threadpool