创建和内存泄漏后立即分离线程

时间:2014-04-23 10:10:07

标签: c multithreading memory-leaks pthreads

我试图创建一个分离的线程,因此我不需要释放为其分配的内存。 Valgrind用于检查内存泄漏。 我使用了IBM example并写了:

void *threadfunc(void *parm)
{
  printf("Inside secondary thread\n");
  return NULL;
}

int main(int argc, char **argv)
{
  pthread_t             thread;
  int                   rc=0;
  rc = pthread_create(&thread, NULL, threadfunc, NULL);
  sleep(1);
  rc = pthread_detach(thread);
  return 0;
}

这有效并且不会造成泄漏,但是没有"睡眠的版本(1);"没有按'吨。 为什么需要睡眠(1)?

1 个答案:

答案 0 :(得分:3)

  

我正在尝试创建一个分离的线程,所以我不需要释放它   分配给它的内存。

在这种情况下,不需要 pthread_detach (),因此不应使用。另外,在这段代码中你还没有做任何明确的内存分配,所以你不必担心释放内存。

  

为什么需要睡眠(1)?

创建新线程时,父线程和子线程可以按任何顺序开始执行。 它取决于操作系统调度和其他因素。现在在这种情况下,如果父线程得到 先调度然后它可能在子线程之前进入并退出程序 开始执行。

通过在父上下文中添加sleep,子线程有时间开始并在完成之前完成执行。但这不是一个好主意,因为我们不知道子线程需要花多少时间。因此, pthread_jon()应该在父上下文中使用。有关详细信息,请参阅POSIX线程文档和下面的链接

中的大块

https://computing.llnl.gov/tutorials/pthreads/