如果在已经返回的线程上调用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_detachundefined behaviour

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

但实施recommendationpthread_detach是:

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

以上是关于如果在已经返回的线程上调用pthread_detach会发生什么的主要内容,如果未能解决你的问题,请参考以下文章

当锁定不可用时,调用Lock.lock()的线程何时从调用返回?

加入一个线程

java异步方法啥意思

Java线程编程中isAlive()和join()的使用详解

多线程-线程同步异步

std::map 上可能的线程不安全操作