求教大神.关于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