如果在已经返回的线程上调用pthread_detach会发生什么

时间:2018-09-07 05:58:15

标签: c linux pthreads

对于以下代码,如果创建的线程“ thread_Id”在调用“ some_Function”之前返回/完成其工作“ pthread_detach(thread_Id)”,则预期的行为是什么?会释放“ thread_Id”所使用的资源吗?

pthread_create(&thread_Id,NULL,some_Function,&queue);   ....

pthread_detach(thread_Id)

//否pthread_join(thread_Id,...)

2 个答案:

答案 0 :(得分:0)

是的,已经完成的线程资源将自动释放。

根据Linux的pthread_detach()手册,该失败仅出于两个原因:

EINVAL - thread is not a joinable thread.
ESRCH  - No thread with the ID thread could be found.

答案 1 :(得分:0)

在生存期已结束的线程上调用pthread_detachundefined behaviour

  

如果应用程序尝试使用生命周期已结束的线程ID,则行为未定义。”

但是实施pthread_detach的{​​{3}}是:

  

如果某个实现在其生命周期结束后检测到使用了线程ID,则建议该函数失败并报告[ESRCH]错误。