为什么线程退出后空间不释放
时间:2011-11-17
来源:互联网
开1个线程大概增加8m VSZ空间,关闭后基本不释放
开2个大概16m
若退出再开,仍然不会增加, 除非增加到3个线程同时开
C/C++ code
线程
Shell()
{
...
pthread_detach (pthread_self());
return NULL;
}
开2个大概16m
若退出再开,仍然不会增加, 除非增加到3个线程同时开
C/C++ code
pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_attr_setstacksize(&attr, 2 * 1024 * 1024); //default:8m if( pthread_create( &thread_id/*pClient->m_ClientThreadID*/, &pServer->m_pattrClient, pClient->Shell, pClient ) != 0 )
线程
Shell()
{
...
pthread_detach (pthread_self());
return NULL;
}
作者: ma100 发布时间: 2011-11-17
我觉得由于线程是共享地址空间的,线程结束之后保留地址空间方便其他新建的线程使用,如果消除之后其他新的线程就得重新开辟地址空间,初始化一些和内存有关的数据结构,这样会导致线程的效率下降,和进程差别不大了。
作者: vanpire110 发布时间: 2011-11-17
我也这么觉得, 但我用的detach, 网上说可以销毁啊, 还有我手动把栈设为2m, 用top看vsz还是涨了8m左右
作者: ma100 发布时间: 2011-11-17
pthread_attr_t attr
和
if( pthread_create( &thread_id/*pClient->m_ClientThreadID*/, &pServer->m_pattrClient,
pClient->Shell, pClient ) != 0 )
你没有attr啊,你用的m_pattrclient。
线程
Shell()
{
...
pthread_detach (pthread_self());
return NULL;
}
不是设置了detach了么,怎么又主动调一次
和
if( pthread_create( &thread_id/*pClient->m_ClientThreadID*/, &pServer->m_pattrClient,
pClient->Shell, pClient ) != 0 )
你没有attr啊,你用的m_pattrclient。
线程
Shell()
{
...
pthread_detach (pthread_self());
return NULL;
}
不是设置了detach了么,怎么又主动调一次
作者: qq120848369 发布时间: 2011-11-17
你没有attr啊,你用的m_pattrclient。
哦,没注意,感谢指出
不是设置了detach了么,怎么又主动调一次,是什么意思呢
哦,没注意,感谢指出
不是设置了detach了么,怎么又主动调一次,是什么意思呢
作者: ma100 发布时间: 2011-11-17
改为pServer-> m_pattrClient后, 栈对了, 线程退出时空间还是没释放
另外我有init_att, 那个清理函数是不是必须的
另外我有init_att, 那个清理函数是不是必须的
作者: ma100 发布时间: 2011-11-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28