pthread_exit,pthread_join和pthread_detach之间的区别

时间:2014-03-15 17:09:37

标签: c linux multithreading pthreads

我是pthreads的新手,我想知道确切的差异是什么。

pthread_exit退出一个帖子。因此pthread_join将返回;但是,分离与pthread_join有何不同?

例如,我创建了一个线程,让我们说线程已经完成,我想完全终止线程,以便稍后重新创建它。什么是更好的使用。 pthread_join还是pthread_detach?

所以执行顺序是

pthread_exit();
pthread_join(); or pthread_detach();

1 个答案:

答案 0 :(得分:21)

从线程本身调用

pthread_exit以提前终止其执行(并返回结果)。

从另一个线程(通常是创建它的线程)调用

pthread_join来等待线程终止并获取其返回值。它可以在您等待呼叫pthread_exit的线程之前或之后调用。如果之前,它将等待退出发生。如果之后,它只是获取返回值并释放pthread_t资源。

可以从线程本身或另一个线程调用

pthread_detach,并指示您不希望线程的返回值或等待它完成的能力。这很有用,因为否则,在您调用pthread_join之前,pthread_t值仍然有效并消耗资源 - 至少是用于存储返回值并占用{{1}的一个可能值的资源。 }。如果您正在使用pthread_t,通常在创建新线程后立即从新线程或创建线程调用它(在pthread_detach之后)。