1581526111 发表于 2016-07-12 13:42

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;
}

MMMIX 发表于 2016-07-12 14:37

回复 1# 1581526111


    你再仔细看看 pthread_detach(3) 中对 detached thread 的描述。

1581526111 发表于 2016-07-12 15:42

回复 2# MMMIX
大哥,小弟还是不懂,大哥就教教小弟吧!大哥你真帅

   

codechurch 发表于 2016-07-12 16:17

detach不是这个意思。
从进程里,线程分离不了的。
要分离也简单,fork啊。
detach其实就是close一个句柄罢了。

cokeboL 发表于 2016-07-12 17:01

皮之不存,毛将焉附:luya:   

1581526111 发表于 2016-07-12 17:37

谢谢三位大哥,皮之不存,毛将焉附----》进程死了!!

windoze 发表于 2016-07-13 02:10

主线程退出进程就结束了,OS在进程结束前会把所有子线程全部干掉,不管它是不是detached。

lxyscls 发表于 2016-07-13 06:00

回复 1# 1581526111


    请在main函数里面用pthread_exit()
页: [1]
查看完整版本: linux c线程分离后子线程依然随主线程退出