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?
创建新线程需要付出代价,并且没有理由为每个文件生成新线程.此外,还有额外的工作需要跟踪这些线程,以便您可以在需要时加入它们.
更好的方法是拥有一个同步队列.主线程将插入作业(例如,路径),您的工作线程可以从队列中读取并处理每个文件.工作线程将阻塞,直到将作业插入队列.
如果您无法访问同步队列,则通过在操作上使用互斥锁来创建一个队列应该相当容易.
pthread_join确实会阻塞,直到提供的线程完成.因此,在您的示例中,必须完成所有线程才能进行打印.
如果你真的想在每次死亡时产生一个新线程 - 你可以在从线程执行的函数返回之前调用一些函数.此函数将生成一个新线程,该线程将处理下一个文件.处理完所有文件后,线程数将自动减少.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |