C中pthread_join()的返回顺序

时间:2014-02-13 20:36:15

标签: c multithreading join

我对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;
}

2 个答案:

答案 0 :(得分:2)

pthread_join等待您引用的线程退出(加入)。因此它会按照你需要的顺序等待,但是在等待它们加入之前,线程可能已经退出很长时间。

答案 1 :(得分:1)

pthread_join(t1, NULL);将被阻止,直到线程t1退出并加入,即使其他线程已经在线程t1之前退出。