为什么pthread_exit就像pthread_join一样?

时间:2015-03-28 08:19:54

标签: c++ c pthreads pthread-join pthread-exit

代码:

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线程并允许它继续?

2 个答案:

答案 0 :(得分:2)

pthread_exit()仅终止调用线程。因此,当您从main()调用它时,它会终止主线程,同时允许进程继续。这是预期的。

如果您拨打exit()(或通过返回隐式退出),则会终止整个过程,您也会看到printHello已终止。

答案 1 :(得分:2)

有相当不错的资源here,但要引用解释问题的部分:

  

讨论从main()调用pthread_exit():

     
      
  • 如果你没有明确地调用pthread_exit(),那么如果main()在它产生的线程之前完成,那么肯定存在问题。它创建的所有线程都将终止,因为main()已经完成并且不再存在以支持线程。

  •   
  • 通过让main()显式调用pthread_exit()作为它做的最后一件事,main()将阻塞并保持活动状态以支持它创建的线程,直到它们完成。

  •