登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

wingjang的博客

 
 
 

日志

 
 

pthread_join()  

2008-12-12 18:11:41|  分类: 天天向上 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
void pthread_exit(void *retval)
int pthread_join(pthread_t th, void **thread_return)

pthread_join()的调用者将挂起并等待th线程终止,retval是pthread_exit()调用者线程(线程ID为th)的返回值,
如果thread_return不为NULL,则*thread_return=retval。
需要注意的是一个线程仅允许唯一的一个线程使用 pthread_join()等待它的终止,并且被等待的线程应该处于可join状态,即非DETACHED状态
------------------------
for (i = 0; i < 10; i++)
{
  if (pthread_create((pthread_t *)&pthr[i].id, NULL,
            (void *)thr_function, (void *)pthr[i]))
  {
    fprintf(stderr, "Create pthread error: %s\n", strerror(errno));
    goto err_flg;
  }
}

for (i = 0; i < 10; i++)
{
  if (pthr[i].id != 0)
    pthread_join(pthr[i].id, NULL);
}

相关1:pthread_join是为了防止主线程没有给其他线程执行的时间就返回了而设计的,
             pthread_join(thread_t th,void ** thread_return )是使主线程等待th线程运行结束再运行
相关2:有时候主线程创建子线程后,如果不使用pthread_join将自己阻塞,自己会先退出而程序结束,
            这样子线程的运行可能无法执行完毕就**退出了,这也算是要使用pthread_join的一个场景吧。

相关3:pthread_join应该是用来回收线程资源的,当线程结束时调用,在一支程序中一直创建线程,而在
           线程结束时又没有用pthread_join则会造成资源不足,无法继续创建线程的情况.

相关4:pthread_join回收线程资源,在pthread_create后父进程就可调用此函数,不过会阻塞父进程直到子进程结束。
           pthread_join()不会阻塞其他子进程。
           可以设置线程属性自动回收资源,就不用调用pthread_join了。
  评论这张
 
阅读(8096)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018