c - pthread_exit、pthread_join 和 pthread_detach 之间的区别

标签 c linux multithreading pthreads

我是 pthreads 的新手,我想知道确切的区别是什么。

pthread_exit 退出一个线程。因此 pthread_join 将返回;然而,detach 与 pthread_join 有什么不同呢?

例如,我创建了一个线程,假设该线程已完成,我想完全终止该线程,以便稍后重新创建它。用什么比较好。 pthread_join 还是 pthread_detach?

所以执行顺序是

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

?

最佳答案

pthread_exit从线程本身调用以提前终止其执行(并返回结果)。

pthread_join从另一个线程(通常是创建它的线程)调用以等待线程终止并获取其返回值。它可以在您等待调用的线程之前或之后调用 pthread_exit .如果之前,它将等待退出发生。如果之后,它只是获取返回值并释放pthread_t资源。

pthread_detach可以从线程本身或另一个线程调用,并表明您不希望线程的返回值或等待它完成的能力。这很有用,因为否则,直到您调用 pthread_join , pthread_t value 保持有效并消耗资源——至少,资源用于存储返回值并占用 pthread_t 的一个可能值。 .如果您使用 pthread_detach ,通常您会在新线程创建后立即从新线程或正在创建的线程调用它(紧接在 pthread_create 之后)。

关于c - pthread_exit、pthread_join 和 pthread_detach 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22427007/

相关文章:

c++ - 如何分配线程本地存储?

linux - 双启动 PC (Windows/Linux) 上的 Windows 时间错误

python - 在 Python 中锁定循环时线程饥饿

c - Linux终端上的Hello.c错误(C语言)

c - 有没有办法操纵我在 C 中移动的位

c++ - 为 C++ 开发人员使用 C 声明和使用枚举和结构

linux - 如何删除具有特定字符串的所有行,但不删除同一文件的特定部分中包含相同字符串的行

c - GCC 不支持简单的整数常量表达式?

C# 不是一个事件

java - 什么时候 AtomicInteger 优于同步?