日期:2014-05-16  浏览次数:20667 次

问一个主线程等待子线程返回的问题
各位好,

  我有一个程序,要创建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来保护这个变量。主线程里面检查看是否所有的线程退出,没有退出则等待。
不建议创建这么多线程。
------解决方案--------------------
引用:
用一个变量来计数,看看有多少个线程结束了,用std::mutex来保护这个变量。主线程里面检查看是否所有的线程退出,没有退出则等待。
不建议创建这么多线程。


其实主要就是保证主线程别提前退出就行。