linux c线程分离后子线程依然随主线程退出
以下是源码,运行以后,子线程没有死循环,随主线程退出了,但是用join等待正常void* func()
{
while(1)
{
printf("111\n");
sleep(1);
}
}
void main()
{
pthread_tpid;
int ret;
pthread_attr_t attr;
memset(&pid,0,sizeof(pthread_t));
pthread_attr_init(&attr);
ret = pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
if(ret)
{
perror("pthread create:");
}
pthread_create(&pid,&attr,func,NULL);
// pthread_detach(pid);
pthread_attr_destroy(&attr);
printf("main pthread exit\n");
return;
}
回复 1# 1581526111
你再仔细看看 pthread_detach(3) 中对 detached thread 的描述。 回复 2# MMMIX
大哥,小弟还是不懂,大哥就教教小弟吧!大哥你真帅
detach不是这个意思。
从进程里,线程分离不了的。
要分离也简单,fork啊。
detach其实就是close一个句柄罢了。
皮之不存,毛将焉附:luya: 谢谢三位大哥,皮之不存,毛将焉附----》进程死了!! 主线程退出进程就结束了,OS在进程结束前会把所有子线程全部干掉,不管它是不是detached。
回复 1# 1581526111
请在main函数里面用pthread_exit()
页:
[1]