Pthread:人们为什么要使用pthread_exit?

时间:2012-01-05 22:49:12

标签: pthreads

据我所知,当你需要终止一个带有返回值的线程时,pthread_exit()完全等于返回。当人们可以使用一致的方式,即返回,为什么Pthread定义这样一个重复的接口?

2 个答案:

答案 0 :(得分:9)

我想到了两个原因:pthread_exit

  1. 允许您从调用堆栈中的任何深度退出线程。

  2. Must be called on the main thread if the TLS keys for the main thread are to have their free functions called.此处也是:“任何已被推送但尚未弹出的取消清理处理程序按照与推送然后执行相反的顺序弹出。在所有取消清理处理程序之后执行,如果线程有任何特定于线程的数据,将以未指定的顺序调用适当的析构函数...当一个线程以外的线程(其中main())进行pthread_exit()的隐式调用首先从用于创建它的启动例程中调用返回。函数的返回值用作线程的退出状态。“

答案 1 :(得分:3)

如果您打算将pthread_exit称为重复接口,那么您还应该调用exit()一个重复的接口,因为您可以在任意点退出该程序。如果您遇到某种错误情况而无法继续,则可能需要调用pthread_exit()。或者,您也可以在线程中找到您正在寻找的任何值。

至于它的真实存在,根据documentation

  

当首次调用main()的线程以外的线程从用于创建它的start例程返回时,对pthread_exit()进行隐式调用。函数的返回值用作线程的退出状态。

因此,如果你从线程中做了return <some pointer>,或者只是到了最后,那么无论如何都会调用pthread_exit()。退出main()也是如此,如果您return 0实际上正在调用exit(0)。该函数必须存在,否则内核将无法确定线程是否退出。