调用pthread_exit时如何从线程例程返回void *

时间:2013-05-23 19:06:20

标签: c pthreads

https://computing.llnl.gov/tutorials/pthreads/samples/join.c

请参阅上面链接中的代码。

问题:

  1. 线程例程(BusyWork)应该返回void *,而是以对pthread_exit()的调用结束(返回void)。
  2. 为什么这不会被标记为失败或错误?我也没有得到任何警告。

1 个答案:

答案 0 :(得分:3)

缺少的链接取自man pthread_create

  

创建后,线程执行start_routine,arg作为唯一参数。如果start_routine返回,则效果就像是对pthread_exit()的隐式调用,使用start_routine的返回值作为退出状态。

所以你有两个选择(选择一个):

  • 您的例程返回值,不会调用pthread_exit
  • 您将返回值传递给pthread_exit

至于为什么它没有被标记:因为编译器知道pthread_exit永远不会返回。如何实现这取决于编译器。在GCC上,可以使用__attribute__((__noreturn__))完成。