首页 > 解决方案 > 如果在已经返回的线程上调用 pthread_detach 会发生什么

问题描述

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

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

pthread_detach(thread_Id)

//没有 pthread_join(thread_Id,...)

标签: clinuxpthreads

解决方案


调用pthread_detach生命周期已结束的线程是未定义的行为

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

但实施的建议pthread_detach是:

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


推荐阅读