+ -
当前位置:首页 → 问答吧 → 为什么线程退出后空间不释放

为什么线程退出后空间不释放

时间:2011-11-17

来源:互联网

开1个线程大概增加8m VSZ空间,关闭后基本不释放
开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了么,怎么又主动调一次

作者: qq120848369   发布时间: 2011-11-17

你没有attr啊,你用的m_pattrclient。
哦,没注意,感谢指出


不是设置了detach了么,怎么又主动调一次,是什么意思呢

作者: ma100   发布时间: 2011-11-17

改为pServer-> m_pattrClient后,   栈对了,   线程退出时空间还是没释放

另外我有init_att,     那个清理函数是不是必须的

作者: ma100   发布时间: 2011-11-17

热门下载

更多