直到最近,我的印象是,如果你“分离”一个线程在产卵后,线程甚至在“主”线程结束后仍然存在。
但是一个小小的实验(如下所示)与我的信念背道而驰。我希望分离的线程即使在主终止后仍会继续打印“从分离的线程中”,但这似乎没有发生。申请显然终止了..。
“”问题返回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;
}发布于 2011-05-18 10:10:03
引用Linux程序员手册
分离属性仅确定线程终止时系统的行为;如果进程使用
exit(3)终止(或者如果主线程返回,则等效地阻止线程终止),它不会阻止线程终止。
也来自Linux程序员手册
为了允许其他线程继续执行,主线程应该通过调用
pthread_exit()而不是exit(3)来终止。
发布于 2011-05-18 10:10:16
pthread_detach只是意味着您再也不会加入线程了。这使p线程库能够知道,一旦线程退出(分离的情况),它是否可以立即释放线程资源,或者是否必须保持线程资源,因为您以后可能会在线程上调用pthread_join。
一旦main返回(或退出),操作系统将收获所有线程并破坏您的进程。
发布于 2011-05-18 10:20:13
pthread_detach不做您认为它做的事情-它向实现表明,具有指定ID的线程所使用的空间可以在其终止时立即回收,即。不会对其执行pthread_join操作。
一旦包含线程的进程终止,所有线程都将终止。
https://stackoverflow.com/questions/6042970
复制相似问题