LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1841|回复: 3

请教pthread编程-线程退出后为什么不会释放资源

[复制链接]
发表于 2009-9-7 13:25:46 | 显示全部楼层 |阅读模式
线程函数里什么都不干,pthread_join后线程占用的空间还是不释放。各位老大指教

:tmp$ gcc a.c -lpthread
:tmp$ ./a.out &
main process
[1] 3817
开始没有进入进程时,只有2M内存
:tmp$ ps aux|grep -i a.out
b17931    3817  0.0  0.0   1728   392 pts/2    S    11:37   0:00 ./a.out
b17931    3819  0.0  0.0   3068   788 pts/2    R+   11:37   0:00 grep -i a.out
:tmp$ thread fn1
线程执行完后,pthread_join了,应该释放内存,但是居然一直占用10M
:tmp$ ps aux|grep -i a.out
b17931    3817  0.0  0.0  10056   460 pts/2    S    11:37   0:00 ./a.out
b17931    3822  0.0  0.0   3068   788 pts/2    R+   11:37   0:00 grep -i a.out
:tmp$

程序代码:
  1. #include <stdio.h>
  2. #include <pthread.h>
  3. void* fn1(void* arg)
  4. {
  5.     printf("thread fn1\n");
  6.     return NULL;
  7. }
  8. int main()
  9. {
  10.     pthread_t tid;
  11.     printf("main process\n");
  12.     sleep(20);
  13.     pthread_create(&tid, NULL, fn1, NULL);
  14.     pthread_join(tid, NULL);
  15.     sleep(500);
  16.     return 0;
  17. }
复制代码
发表于 2009-9-18 22:24:53 | 显示全部楼层
遇到过类似情况。顶一下。期待高手回答。
回复 支持 反对

使用道具 举报

发表于 2009-9-19 12:25:35 | 显示全部楼层
应该是pthread_create等函数所在共享库的载入占用的空间。
继续 pthread_create join pthread_create join 就应该不会继续增加了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-20 13:16:19 | 显示全部楼层
不好意思,早解决了,现在才把答案放上来,8M是因为默认的线程公用的栈大小是8M,线程destroy了也会保留给以后的线程用,如果改下栈大小,内存大的问题就解决了

#define THREAD_STACK_SIZE 32*1024       //32kB

+    pthread_attr_t attr;
+    pthread_attr_init(&attr);
+    pthread_attr_setstacksize(&attr, THREAD_STACK_SIZE);
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表