问一个主线程等待子线程返回的问题
各位好,
我有一个程序,要创建400多的子线程,每个子线程执行时间比较短,为了避免栈空间不足,在子线程里调用了pthread_detach()。
代码如下 :
int main(){
pthread_t pids[THREAD_NUM];
int args[THREAD_NUM];
for(int i = 0; i<THREAD_NUM; i++){
args[i]=i;
int ret=pthread_create(&(pids[i]), NULL, worker, (void*)&(args[i]));
if(ret!=0){
perror("pthread_create");
exit(0);
}
}
}
现在的问题是,主线程创建完子线程后直接退出,导致部分子线程没有执行完。
如果子线程里不detach(),在主线程里join子线程,又会导致线程数太多stacksize不足,创建线程到300多个就失败。
还请教一下,如何创建THREAD_NUM(400或者更多)的子线程,然后等子线程执行完再退出。
谢谢。
------解决方案--------------------先确定你的硬件添加支持不支持能够创建这么多线程吧!
------解决方案--------------------用一个变量来计数,看看有多少个线程结束了,用std::mutex来保护这个变量。主线程里面检查看是否所有的线程退出,没有退出则等待。
不建议创建这么多线程。
------解决方案--------------------
其实主要就是保证主线程别提前退出就行。