我对pthread_join()的返回顺序有点困惑。假设我有以下代码。是按此顺序返回连接线程的顺序:s2,s3,t2,s1,t1,main(隐式线程)?
所有线程 s1,s2,s3,t1和t2 都加入主线程,对吗?我发现这个概念令人困惑。谢谢你的帮助。
int main()
{
pthread_t t1, t2;
pthread_t s1, s2, s3;
pthread_create(&t1, NULL, tseries, NULL);
pthread_create(&t2, NULL, tseries, NULL);
pthread_create(&s1, NULL, sseries, NULL);
pthread_create(&s2, NULL, sseries, NULL);
pthread_create(&s3, NULL, create_subthread, NULL);
pthread_join(t1, NULL);
pthread_join(s1, NULL);
pthread_join(t2, NULL);
pthread_join(s3, NULL);
pthread_join(s2, NULL);
pthread_exit(0);
return 0;
}
答案 0 :(得分:2)
pthread_join
等待您引用的线程退出(加入)。因此它会按照你需要的顺序等待,但是在等待它们加入之前,线程可能已经退出很长时间。
答案 1 :(得分:1)
pthread_join(t1, NULL);
将被阻止,直到线程t1退出并加入,即使其他线程已经在线程t1之前退出。