我正在使用pthread_create
函数在Ubuntu中创建一个线程。我通过top命令观察到,一旦线程被创建,虚拟内存就会增加,但即使在线程退出之后,内存也不会减少。我甚至使用pthread_detach()
[根据pthread_detach
手册,它会自动释放它在创建过程中获得的所有资源],但仍然得到相同的结果。请在下面找到示例代码:
size_t const thread_no = 1;
char mess[] = "This is a test";
void *message_print(void *ptr){
int error = 0;
char *msg;
/* Detach the thread */
error = pthread_detach(pthread_self());
/* Handle error if any */
printf("THREAD: This is the Message %s\n", mess);
}
int main(void) {
int error = 0;
size_t i = 0;
/* Create a pool of threads */
pthread_t thr[thread_no];
pthread_attr_t attr;
pthread_attr_init(&attr);
error = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
for(i = 0; i < thread_no; i++) {
error = pthread_create( &(thr[i]), &attr, message_print, (void *) mess);
/* Handle error */
}
printf("MAIN: Thread Message: %s\n", mess);
while(1);
}
答案 0 :(得分:2)
当操作系统实际回收资源时,操作系统真的取决于操作系统。您可能会或可能不会立即看到效果。如果您想要生成另一个线程(或不是),操作系统可以保留资源。它可能会持有它,直到实际需要其他东西。
即使你已经“释放”它,操作系统也可能不需要立即回收它。
答案 1 :(得分:0)
我有同样的问题,我只是通过设置分离属性
来解决问题pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
我希望它也能解决你的问题。