第二个分离的线程不打印消息

时间:2015-04-22 10:01:08

标签: c multithreading

尝试设置一个小型客户端 - 服务器程序。但是,我注意到第二个帖子的输出没有打印出来。

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?,分离的线程应该在主要退出后继续执行。为什么会这样?

2 个答案:

答案 0 :(得分:1)

也许你过早地破坏了分离的线程?如果您只是创建线程然后将其销毁,则不会给printf执行时间。尝试在main中创建线程后添加一些休眠时间,然后您将看到输出。

当你在主线程中添加另一个printf时,你会给另一个线程时间在被销毁之前执行。

答案 1 :(得分:0)

当主线程在新创建的线程有时间打印之前退出时,可能会发生这种情况。如果主线程等待直到另一个线程完成动作,则可以解决。使用pthread_join。

尝试拨打

pthread_join(client_thread, NULL);

pthread_attr_destroy(&attr);

当您在主线程中添加另一个print语句时,它实际上会使主线程保持活动状态更长时间。