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

求教大神.关于pthread_join函数
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)出现问题时,会发生什么情况?

谢谢大神指导.

------解决方案--------------------
引用:
所以说不明白它那句话的意思....求教


多个线程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烧掉了,还可能导致月亮掉下来了。。。这个就是未定义行为的行为

------解决方案--------------------
那句话的意思是,不要多次在不同的线程调用join同一个线程。不是一个线程多次调用join