我正在学习Tanenbaum的Modern Operating systems中的线程和POSIX线程.这是我正在尝试的一个例子:
#include#include #include 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
功能?这有什么不对?
提前致谢.
您的main()
线程不会等待线程完成.因此,根据线程的调度,您可能会或可能不会看到print_hello
线程的输出.当main()
线程退出时,整个过程就会消失.
使用pthread_join()
等待创建的线程完成或者只是使用退出仅主线程pthread_exit(0);
代替exit(0)
.