尝试设置一个小型客户端 - 服务器程序。但是,我注意到第二个帖子的输出没有打印出来。
void *ClientRoutine(void *args){
printf("Client thread created\n");
pthread_exit(NULL);
}
int main(int argc, char *argv[]){
pthread_t client_thread;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if (pthread_create(&client_thread, &attr, &ClientRoutine, NULL)) {
perror("Failed to create client thread");
exit(-1);
}
pthread_attr_destroy(&attr);
return 0;
}
如果我在主线程中打印了一些内容,客户端的输出最终会显示出来。任何人都可以解释为什么会这样吗?
LE :正如你们有人建议的那样,这确实发生了,因为主线程提前退出。但是,根据这个:What happens to a detached thread when main() exits?,分离的线程应该在主要退出后继续执行。为什么会这样?
答案 0 :(得分:1)
也许你过早地破坏了分离的线程?如果您只是创建线程然后将其销毁,则不会给printf
执行时间。尝试在main
中创建线程后添加一些休眠时间,然后您将看到输出。
当你在主线程中添加另一个printf
时,你会给另一个线程时间在被销毁之前执行。
答案 1 :(得分:0)
当主线程在新创建的线程有时间打印之前退出时,可能会发生这种情况。如果主线程等待直到另一个线程完成动作,则可以解决。使用pthread_join。
尝试拨打
pthread_join(client_thread, NULL);
前
pthread_attr_destroy(&attr);
当您在主线程中添加另一个print语句时,它实际上会使主线程保持活动状态更长时间。