繁体   English   中英

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

[英]Detach thread right after creation and memory leaks

我正在尝试创建一个分离的线程,所以我不需要释放为它分配的内存。 Valgrind用于检查内存泄漏。 我使用过IBM的例子并写了:

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;
}

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

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

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

为什么需要睡眠(1)?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM