如何在PThread退出后回收内存?

时间:2011-11-17 16:31:16

标签: ubuntu pthreads

我正在使用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);
}

2 个答案:

答案 0 :(得分:2)

当操作系统实际回收资源时,操作系统真的取决于操作系统。您可能会或可能不会立即看到效果。如果您想要生成另一个线程(或不是),操作系统可以保留资源。它可能会持有它,直到实际需要其他东西。

即使你已经“释放”它,操作系统也可能不需要立即回收它。

答案 1 :(得分:0)

我有同样的问题,我只是通过设置分离属性

来解决问题
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); 

我希望它也能解决你的问题。