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

我写了这段代码:

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打印任何内容。
为什么不执行分离的线程?

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

原始代码示例中存在运行条件。 在attr_destroy之前添加一个sleep(5)。