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

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

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

最佳答案

I'm trying to create a detached thread so I won't need to free the memory allocated for it.

在这种情况下,pthread_detach() 不是必需的,因此不应使用。此外,在此代码片段中您没有进行任何显式内存分配,因此您不必担心释放内存。

Why is this sleep(1) needed?

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

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

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

关于c - 创建和内存泄漏后立即分离线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23241190/

相关文章:

.net 垃圾收集和托管资源

c - 无类型 union (没有类型标签)有什么用处吗?

Python - 如何不在构建线程步骤中启动线程

multithreading - 在非 VCL 应用程序中使用同步有危险吗?

c# - MongoDb Upsert死锁

java - 如何在无限循环中使用更少的堆空间?

Iphone SDK Utility 应用模板泄露

c - Linux 内核如何设置 PCI BAR 以便不存在地址冲突?

C 共享内存指针映射

c - 第二个 printf,与我的第一个 printf 相同,使程序崩溃