Код: Выделить всё
#include <iostream>
#include <sstream>
#include <pthread>
#include <sys>
#include <unistd>
static int status=0;
void* entry(void* param)
{
char *p = new char[1024*1024];
delete []p;
sleep(1);
cout<<"exit thread "<<*((pthread_t*)param)<<"\r\n";
pthread_exit((void*)&status);
}
int main(int argc, char* argv[])
{
int i;
cout<<"kren\r\n";
cout<<"pid = "<<getpid()<<"\r\n";
cout<<"kren\r\n";
char a;
cin>>a;
int stackSize = 1024 * 256;
pthread_attr_t attr;
if(pthread_attr_init(&attr) != 0) {
cout<<"pthread_attr_init error\r\n";
}
pthread_attr_setstacksize(&attr,(size_t)stackSize);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_t tr[200];
for(i=0;i<200;i++){
int r = pthread_create(
&(tr[i]),
&attr,
entry,
(void*)&(tr[i]));
if(r != 0 ){
cout<<"pthread_create error\r\n";
}
cout<<"create thread ("<<tr[i]<<") num "<<i<<"\r\n";
if(i == 100)
sleep(5);
}
sleep(2);
pthread_attr_destroy (&attr);
cout<<"end\r\n";
cin>>a;
return 0;
}
VIRT = 2480, RES = 592, SWAP = 1888
затем создаются потоки и выходят(main еще работает), опять смотрю top -p PID:
VIRT = 28904, RES = 1536, SWAP = 26m
в чем дело? я думад что после выхода потоков я должен увидеть тоже самое что и до их создания?
System:
CentOS release 4.2 (Final), 2.6.9-22.EL, gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)