繁体   English   中英

为什么pthread_exit的行为类似于pthread_join?

[英]Why pthread_exit acts like pthread_join?

码:

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()的讨论:

  • 如果main()在未显式调用pthread_exit()的情况下在其产生的线程之前完成,则肯定存在问题。 它创建的所有线程将终止,因为main()已完成,并且不再存在以支持线程。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM