创建(分离)的线程从未执行过

时间:2012-05-28 16:51:13

标签: c pthreads

我写了这段代码:

void* th (void* arg)
{
    sleep(1);
    for(int i=0; i<1000;i++)
    {
    fprintf(stderr,"%d\t",i);
    }
    pthread_exit(NULL);
}

int main(int argc, char** argv)
{
    pthread_t thread;
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
    pthread_create(&thread,&attr,th,NULL);
    pthread_attr_destroy(&attr);
    return 0;
}

分离状态应该使线程不可连接,所以它应该在主进程终止后运行。但是它不打印数字,我看到的是线程终止而没有向stderr打印任何内容。 /> 为什么不执行分离的线程?

1 个答案:

答案 0 :(得分:6)

return线程中的main相当于整个过程的exit,因此您的进程将在您的线程甚至可以打印任何内容之前退出。请改用pthread_exit来终止该线程。