免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11727 | 回复: 4
打印 上一主题 下一主题

pthread_join()的阻塞性问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-25 00:34 |只看该作者 |倒序浏览
  1.         for(i = 0; i < nthreads; i++){
  2.                 count[i] = 0;
  3.                 pthread_create(&tid_produce[i], NULL, produce, (void*)&count[i]);
  4.         }

  5.         for(i = 0; i < nthreads; i++){
  6.                 pthread_join(tid_produce[i], NULL);
  7.                 printf("cound[%d] = %d\n", i, count[i]);
  8.         }

复制代码

1。pthread_join函数是不是阻塞的?
2。上面的代码应该是:nthreads个线程同时运行,但是pthread_join函数返回的顺序是从第一个线程返回后,继续
循环,然后依此等待第2,3,.............线程返回,是不是这样的?
3。加入等待第1个线程返回时,第2个线程已经结束返回,但此时等待第2个线程的pthread_join(tid_produce[1], NULL)还没有开始,因为
第一个pthread_join(tid_produce[0],NULL)还没有返回呢!那么这个时候当for循环到处理第2个线程的pthread_join(tid_produce[1], NULL)
时是怎么处理的?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2007-10-25 09:09 |只看该作者
自己试验下嘛

论坛徽章:
0
3 [报告]
发表于 2007-10-25 12:40 |只看该作者

回复 #2 MMMIX 的帖子

问题1:是阻塞的
问题2:是那样的

但问题3是怎么处理的?
问题3。假如pthread_join(tid_produce[0],NULL)还在等待第1个线程返回时,第2个线程已经结束返回,但此时等待第2个线程的pthread_join(tid_produce[1], NULL)还没有开始运行(因为for循环阻塞在第一次循环上),第一个pthread_join(tid_produce[0],NULL)还没有返回呢!那么这个时候当for循环到处理第2个线程的pthread_join(tid_produce[1], NULL)
时是怎么处理已经在pthread_join(tid_produce[0],NULL)返回前结束的线程2的?

论坛徽章:
0
4 [报告]
发表于 2007-10-25 12:42 |只看该作者

回复 #2 MMMIX 的帖子

问问题之前已经实践过了,但不是很确定。
一点都没有思考的话也不会傻忽忽的上来瞎问。

论坛徽章:
0
5 [报告]
发表于 2007-10-26 01:08 |只看该作者
原帖由 xiaozhu2007 于 2007-10-25 12:40 发表
问题1:是阻塞的
问题2:是那样的

但问题3是怎么处理的?
问题3。假如pthread_join(tid_produce[0],NULL)还在等待第1个线程返回时,第2个线程已经结束返回,但此时等待第2个线程的pthread_join(tid_produc ...


对于以 joinable 方式创建的线程,在你对其 pthread_join 前,该线程的计数及返回状态等信息是不会被回收的,你等 thread 1 被join 完了再 join thread 2 就是

A thread that has exited but remains unjoined counts against [_POSIX_THREAD_THREADS_MAX]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP