我在这里偶然发现了一个代码示例。 引起我注意的线条(跳过所有其他线条):
{ ... void *res; ... s = pthread_join(tinfo[tnum].thread_id,&res); ... free(res); /* Free memory allocated by thread */ }
任何人比我更深入pthreads评论free(res) ,请? 我不得不说,我以前从来没有见过这样的事情,而使用Googlesearch1-1.5小时并没有给我任何其他类似的例子。
如何得到手表用引号运行bash脚本
无缝内核,isolcpus,nohz_full和rcu_nocbs
如何用setuptools打包Python守护进程
get_user_pages()linux内核使用virt_to_page()
如何使用procfs将内核数据发送给用户空间?
在pthread_join(thread_id,&res)中,如果&res不是NULL – 是否需要空闲(res)?
这取决于线程的返回值是否是动态分配的(使用malloc() &co)。
如果你看看同一页面上的函数thread_start() ,你会看到它有一个return语句:
return uargv;
uagrv分配给:
uargv = strdup(tinfo->argv_string);
因此, free()调用在pthread_join()调用之后的main()使用。 因为res是由uargv (由线程返回)填充的。 你可以在概念上假设在pthread_join()函数中有这样的代码:
if (res) *res = uargv;
这是它分配使用strdup() (内部分配内存)。 所以你free()它。 如果线程只是return NULL; (和free()是uargv本身),那么你不需要free() 。
一般的答案是,如果你用malloc()系列函数分配一些东西,那么你需要free() 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。