代码:
void *PrintHello(void *threadid)
{
cout<<"Hello"<<endl;
sleep(3);
cout<<"Still PrintHello is alive"<<endl;
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
cout<<"Calling thread:"<<t<<endl;
pthread_create(&threads[0], NULL, PrintHello, NULL);
//pthread_join(threads[0],NULL);
cout<<"Main exits"<<endl;
pthread_exit(NULL);
}
为什么pthread_exit(NULL)
此处的行为与pthread_join()
类似?即为什么退出main
不会破坏printHello
线程并允许它继续?
答案 0 :(得分:2)
pthread_exit()
仅终止调用线程。因此,当您从main()
调用它时,它会终止主线程,同时允许进程继续。这是预期的。
如果您拨打exit()
(或通过返回隐式退出),则会终止整个过程,您也会看到printHello
已终止。
答案 1 :(得分:2)
有相当不错的资源here,但要引用解释问题的部分:
讨论从main()调用pthread_exit():
如果你没有明确地调用pthread_exit(),那么如果main()在它产生的线程之前完成,那么肯定存在问题。它创建的所有线程都将终止,因为main()已经完成并且不再存在以支持线程。
通过让main()显式调用pthread_exit()作为它做的最后一件事,main()将阻塞并保持活动状态以支持它创建的线程,直到它们完成。