为什么pthread_exit的行为类似于pthread_join

Why pthread_exit acts like pthread_join?

本文关键字:pthread 类似于 join exit 为什么      更新时间:2023-10-16

代码:

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

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

如果您改为调用exit()(或通过返回从中隐式退出),它将终止整个过程,并且您将看到printHello也被终止。

这里有一个很好的资源,但要引用解释您问题的部分:

关于从main()调用pthread_exit()的讨论:

  • 如果不显式调用pthread_exit(),那么如果main()在它派生的线程之前完成,就会出现明显的问题。它创建的所有线程都将终止,因为main()已完成,不再存在以支持线程。

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