使用pthread_create创建的线程的输出未打印

时间:2015-12-17 09:54:05

标签: c linux multithreading pthreads

我正在学习线程&来自 Tanenbaum 现代操作系统的POSIX线程。这是我正在尝试的一个例子:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *print_hello(void *tid)
{
    printf("Hello..Greetings from thread %d\n",tid);
    pthread_exit(NULL);
}

int main()
{
    pthread_t threads[10];
    int status,i=0;

//  for(i=0;i<10;i++){
        printf("Creating thread %d\n",i);
        status = pthread_create(&threads[i],NULL,print_hello,(void*)i);

        if(status != 0){
            printf("Oops pthread_create returned error code %d\n",status);
            exit(-1);
        }
//  }
    exit(0);

}

输出是:

Creating thread 0

为什么不转到start_routine print_hello这里的功能?这有什么不对?

提前致谢。

1 个答案:

答案 0 :(得分:5)

您的main()线程不会等待线程完成。因此,根据线程的调度,您可能会或可能看不到print_hello线程的输出。当main()线程退出时,整个过程就会消失。

使用pthread_join()等待创建的线程完成,或者只使用pthread_exit(0);而不是exit(0)退出主线程。