linux下main thread如何使用pthread_join等待子线程结束后再退出

lixkernel 2008-01-28 03:09:06
我的程序流程:main thread 创建10个thread,然后每个子thread开始计数++,等到数到20000后子thread停止。然后在mainthread内进行平均thread计算时间统计。但是统计函数应该在什么位置才能保证所有的子thread都执行完毕在统计呢?
thread_join 应该怎么用呢??
int main(int argc, char * argv[])
{
pthread_t dbthread[10];
int i;
int rslt = 1;
int threadid[10]={0,1,2,3,4,5,6,7,8,9};

db_init(); //初始化一些全局数据

for (i = 0; i<10 ; i++)
{
//创建10个子线程
rslt = pthread_create(&dbthread[i], NULL,db_thread_entry, &threadid[i]);


if(rslt)
{
CDB_PTTRACE_TO_FILE("create [%d] thread FAILED\n", i);
return 0;
}
}

//join10个thread
for(i=0;i<10;i++)
{
//need some join-thread op;
pthread_join(&dbthread[i], NULL);
}


summary_speed(); //统计

return 0;
}
...全文
1217 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
flywindwyy 2010-12-01
  • 打赏
  • 举报
回复
pthread_join(&dbthread[i], NULL);
这个后面不能用NULL
重新定义一个 void *ret;
pthread_join(&dbthread[i], &ret);
应该是这样吧!!
twobuttly 2009-03-18
  • 打赏
  • 举报
回复
我也遇到同样的问题,如何解决?
谢谢先!
lixkernel 2008-02-29
  • 打赏
  • 举报
回复
但是执行的时候还是有些thread 会提前终止
cfy84 2008-01-29
  • 打赏
  • 举报
回复
函数pthread_join是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回,即线程执行完毕。
所以搂主写的程序可以保证是在所有的子thread都执行完毕才进行统计的。
cnwolf 2008-01-28
  • 打赏
  • 举报
回复
楼主写的程序就可以阿
yecheng_110 2008-01-28
  • 打赏
  • 举报
回复
pthread_join就能保证

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧