读书人

为什么线程退出后空间不释放,该怎么解

发布时间: 2012-02-16 21:30:36 作者: rapoo

为什么线程退出后空间不释放
开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:8mif( pthread_create( &thread_id/*pClient->m_ClientThreadID*/, &pServer->m_pattrClient,                    pClient->Shell, pClient ) != 0 ) 


线程
Shell()
{
...
pthread_detach (pthread_self());
return NULL;
}

[解决办法]
我觉得由于线程是共享地址空间的,线程结束之后保留地址空间方便其他新建的线程使用,如果消除之后其他新的线程就得重新开辟地址空间,初始化一些和内存有关的数据结构,这样会导致线程的效率下降,和进程差别不大了。
[解决办法]
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了么,怎么又主动调一次

读书人网 >UNIXLINUX

热点推荐