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

Men*_*phy 10 pthreads

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

Dar*_*con 9

我想到的两个原因: pthread_exit

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

  2. 如果主线程的TLS键要调用其自由函数,则必须在主线程上调用.在这里:"任何已被推送但尚未弹出的取消清理处理程序按照与它们被推送然后执行相反的顺序弹出.在所有取消清理处理程序已执行之后,如果该线程具有任何特定于线程的数据,将以未指定的顺序调用适当的析构函数... 当首次调用main()的线程以外的线程从用于创建它的start例程返回时,对pthread_exit()进行隐式调用.函数的返回值用作线程的退出状态."

  • 是的,当然,就像`exit()`结束所有线程,无论它们碰巧是在其中一个调用它的时候.你仍然可以用return替换`pthread_exit`,但是你必须让所有的函数都返回,一直到线程启动例程. (7认同)
  • @Mengfei:`pthread_exit()`如果你在`pthread_create()`启动的函数中,只能用`return`代替.如果线程在函数调用堆栈中更深,则`return`根本不会执行相同的操作. (4认同)
  • 对于#1,是的,但这可能不方便.对于#2,它不能.查看我发布的链接.我最近在现实世界中碰到了这个. (3认同)