我如何编码以保持我的程序中的8个线程始终处于活动状态?

Lor*_*oh. 0 c++ multithreading pthreads

我的代码必须独立处理几百个文件.我想让我的程序始终处理8个线程.一旦其中一个线程完成,我想启动一个处理新文件的新线程,而不会阻止我的代码,直到最后完成所有线程.

我在linux上使用pthread.

我不清楚如何编码.确实pthread_join()块代码执行?我如何知道一个线程何时完成?这段代码是如何执行的?

pthread_join(thread1)
pthread_join(thread2)
Run Code Online (Sandbox Code Playgroud)

thread1必须在pthread_join(thread2)执行之前完成吗?

所以,如果我放置

for (i=0;i<7;i++)
    pthread_join(thread[i])
cout<<"Here!";
Run Code Online (Sandbox Code Playgroud)

这是否意味着我必须等待所有线程在Here!打印之前完成?

或者我应该不使用pthreads?

Vad*_*dim 5

创建新线程需要付出代价,并且没有理由为每个文件生成新线程.此外,还有额外的工作需要跟踪这些线程,以便您可以在需要时加入它们.

更好的方法是拥有一个同步队列.主线程将插入作业(例如,路径),您的工作线程可以从队列中读取并处理每个文件.工作线程将阻塞,直到将作业插入队列.

如果您无法访问同步队列,则通过在操作上使用互斥锁来创建一个队列应该相当容易.

pthread_join确实会阻塞,直到提供的线程完成.因此,在您的示例中,必须完成所有线程才能进行打印.

如果你真的想在每次死亡时产生一个新线程 - 你可以在从线程执行的函数返回之前调用一些函数.此函数将生成一个新线程,该线程将处理下一个文件.处理完所有文件后,线程数将自动减少.