我正在学习线程&来自 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
这里的功能?这有什么不对?
提前致谢。
答案 0 :(得分:5)
您的main()
线程不会等待线程完成。因此,根据线程的调度,您可能会或可能看不到print_hello
线程的输出。当main()
线程退出时,整个过程就会消失。
使用pthread_join()
等待创建的线程完成,或者只使用pthread_exit(0);
而不是exit(0)
退出主线程。