一五零号 2022-08-19 12:09 采纳率: 66.7%
浏览 11
已结题

为什么Linux中thread_detach()导致内存泄漏

问题遇到的现象和发生背景

在Ubuntu系统中的vim下使用thread_detach()函数时,发现这个函数在处理含有lseep()的线程时会造成内存泄漏


```c

  1 #include "stdio.h"
  2 #include "pthread.h"
  3 #include <unistd.h>
  4 #include <stdlib.h>
  5 
  6 //如果不
  7 
  8 
  9 
 10 void* funct(void* a){
 11 //回调函数
 12 //sleep(1);
 13 //      sleep(5);
 14 //      sleep(10);
 15         sleep(50);
 16         printf("end");
 17         pthread_exit(0);//线程的显示退出        
 18 }
 19 
 20 int main()
 21 {
 22         pthread_t tid[10];
 23         int ret,i;
 24         for(i=0;i<10;i++)
 25         {
 26                 sleep(1);
 27                 ret=pthread_create(&tid[i],NULL,funct,NULL);
 28                 if(ret<0)
 29                 {
 30                         printf("create thread failed\n");
 31                         return -1;
 32                 }
 33                   printf("begin thread:%d\n",i);
 34                 pthread_detach(tid[i]);
 35         }
 36         printf("thread_join process\n");
 37         while(1)
 38         {
 39                 printf("1\n");
 40         }
 41 }



具体现象就是当线程执行sleep(50)时,使用pthread_detach回收内存的话最终虚拟内存为428756;
不使用,不回收内存的话最终线程关闭后虚拟内存为150252。
请问这时什么原因呢?
  • 写回答

1条回答 默认 最新

  • kakaccys 2022-08-19 12:28
    关注

    需要有pthread_join函数,有这个函数返回时,你起的线程才会释放资源,参考下面文章
    https://blog.csdn.net/wushuomin/article/details/80051295

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月27日
  • 已采纳回答 8月19日
  • 创建了问题 8月19日

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用