对于以下代码,如果创建的线程“ 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,...)
答案 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_detach
是undefined behaviour:
如果应用程序尝试使用生命周期已结束的线程ID,则行为未定义。”
但是实施pthread_detach
的{{3}}是:
如果某个实现在其生命周期结束后检测到使用了线程ID,则建议该函数失败并报告[ESRCH]错误。