pthread_join(thread_id,& res),如果& res不为NULL - 是否需要空闲(res)?

时间:2016-03-03 10:48:00

标签: linux pthreads pthread-join

我偶然发现了一个代码示例here。吸引我注意的线条(所有其他线条都被跳过):

{  
...  
void *res;  
...  
s = pthread_join(tinfo[tnum].thread_id, &res);  
...  
free(res);      /* Free memory allocated by thread */  
}  

有人可以更深入地了解pthreads而不是我自己评论free(res)吗?我不得不说我以前从未见过这种情况,并且用1.5到5小时的谷歌搜索没有给我任何其他类似的例子。

1 个答案:

答案 0 :(得分:2)

  

在pthread_join(thread_id,& res)中,如果& res不为NULL - 是免费的(res)   需要的?

取决于线程的返回值是否是动态分配的(使用malloc()& co)。

如果你在同一页面上查看函数thread_start(),你会发现它有一个return语句:

return uargv;

uagrv分配了:

       uargv = strdup(tinfo->argv_string);

因此,在free()来电后main()使用pthread_join()来电。 因为res填充了uargv(由线程返回)。您可以在概念上假设pthread_join()函数中有这样的代码:

 if (res)
   *res = uargv;

这是使用strdup()(内部分配内存)分配的。所以你free()。如果帖子只有return NULL;(和uargv本身的free()),那么您就不需要free()

一般的答案是,如果您使用malloc()家庭功能分配某些内容,则需要free()