求教大神.关于pthread_join函数

影子魔术师 2013-12-30 07:44:59
pthread_join函数中有这么一句话,不是很理解.

If multiple threads simultaneously try to join with the same thread, the results are undefined.
多个线程同时join到一个线程里面时,结果没有定义.
什么时候会出现这种情形?会出现什么意外结果?

最近在写一个程序,开了4个线程,轮流join,没有出现过什么错误...

伪代码
pthread_create(A);
pthread_create(B);
pthread_create(C);
pthread_create(D);
//假设ABCD线程都能很快返回
sleep(10);//保证都能线程执行完成
pthread_join(A);
pthread_join(B);
pthread_join(C);
pthread_join(D);

在join A的时候,假设ABCD都已经执行完成了...这时可能会有问题?(不知道自己理解的对不对)


综合来说:
问题2个.
1)什么时候可能会有问题?

2)出现问题时,会发生什么情况?

谢谢大神指导.
...全文
137 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Carl_CCC 2013-12-31
  • 打赏
  • 举报
回复
那句话的意思是,不要多次在不同的线程调用join同一个线程。不是一个线程多次调用join
半字节 2013-12-31
  • 打赏
  • 举报
回复
引用 2 楼 cdhql 的回复:
所以说不明白它那句话的意思....求教
多个线程join1个 比如 main() { pthread_create(A); pthread_create(B); pthread_create(C); pthread_create(D); join(A) } funcB(){ join(A) } funcC(){ join(A) } 这个就是主线程 B 和C 3个线程同时joinA 没有定义的行为会有什么问题? 答:会有任何问题, 可能跑死了,可能死循环了,可能显示器冒烟了,可能CPU烧掉了,还可能导致月亮掉下来了。。。这个就是未定义行为的行为
影子魔术师 2013-12-31
  • 打赏
  • 举报
回复
引用 4 楼 wangzaiwei2006 的回复:
[quote=引用 2 楼 cdhql 的回复:] 所以说不明白它那句话的意思....求教
多个线程join1个 比如 main() { pthread_create(A); pthread_create(B); pthread_create(C); pthread_create(D); join(A) } funcB(){ join(A) } funcC(){ join(A) } 这个就是主线程 B 和C 3个线程同时joinA 没有定义的行为会有什么问题? 答:会有任何问题, 可能跑死了,可能死循环了,可能显示器冒烟了,可能CPU烧掉了,还可能导致月亮掉下来了。。。这个就是未定义行为的行为 [/quote] 多谢!
影子魔术师 2013-12-31
  • 打赏
  • 举报
回复
引用 5 楼 Idle_Cloud 的回复:
那句话的意思是,不要多次在不同的线程调用join同一个线程。不是一个线程多次调用join
多谢!
影子魔术师 2013-12-30
  • 打赏
  • 举报
回复
pthead_join函数不像waitpid(-1,xxx)可以接受任何的id,pthread_join中指定了线程号了的嘛.....
影子魔术师 2013-12-30
  • 打赏
  • 举报
回复
所以说不明白它那句话的意思....求教
半字节 2013-12-30
  • 打赏
  • 举报
回复
多个线程同时join到一个线程里面时,结果没有定义. 你的例子我怎么也看不出来是多个线程join1个线程。。。倒像是主线程 join这4个线程

23,121

社区成员

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

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