如果在已经返回的线程上调用pthread_detach会发生什么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果在已经返回的线程上调用pthread_detach会发生什么相关的知识,希望对你有一定的参考价值。
对于下面的代码,如果创建的线程“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,...)
答案
是的,已经完成的线程的资源将被自动释放。
根据Linux的pthread_detach()
手册,它失败只有两个原因:
EINVAL - thread is not a joinable thread.
ESRCH - No thread with the ID thread could be found.
另一答案
在生命周期结束的线程上调用pthread_detach
是undefined behaviour:
如果应用程序尝试使用其生命周期已结束的线程ID,则行为未定义。“
但实施recommendation的pthread_detach
是:
如果实现在生命周期结束后检测到使用了线程ID,则建议该函数失败并报告[ESRCH]错误。
以上是关于如果在已经返回的线程上调用pthread_detach会发生什么的主要内容,如果未能解决你的问题,请参考以下文章
当锁定不可用时,调用Lock.lock()的线程何时从调用返回?