直到最近,我给人的印象是,如果在生成后“分离”线程,即使“主”线程终止后该线程仍然存在。
但是一个小实验(下面列出)违背了我的信念。我希望分离的线程即使在主终止后仍能继续打印“从分离的线程讲话”,但这似乎没有发生。该应用程序显然终止了…
“分离的”线程在“主要”问题 返回0 后会死吗?
#include <pthread.h> #include <stdio.h> void *func(void *data) { while (1) { printf("Speaking from the detached thread...\n"); sleep(5); } pthread_exit(NULL); } int main() { pthread_t handle; if (!pthread_create(&handle, NULL, func, NULL)) { printf("Thread create successfully !!!\n"); if ( ! pthread_detach(handle) ) printf("Thread detached successfully !!!\n"); } sleep(5); printf("Main thread dying...\n"); return 0; }
引用《Linux程序员手册》:
detached属性仅确定线程终止时系统的行为。如果进程使用终止exit(3)(或等效地,如果主线程返回),则不会阻止线程终止。
exit(3)
同样来自Linux程序员手册:
为了允许其他线程继续执行,主线程应通过调用pthread_exit() 而不是来终止exit(3)。
pthread_exit()