【问题标题】:Will pthread_detach manage my memory for me?pthread_detach 会为我管理我的内存吗?
【发布时间】:2010-09-13 05:20:44
【问题描述】:

假设我有以下代码:

while(TRUE) {
  pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t));
  pthread_create(thread, NULL, someFunction, someArgument);
  pthread_detach(*thread);
  sleep(10);
}

分离的线程会释放 malloc 分配的内存,还是我现在必须做的事情?

【问题讨论】:

    标签: c multithreading memory-management malloc pthreads


    【解决方案1】:

    没有。 pthread_create() 无法知道传递给它的 thread 指针是动态分配的。 pthreads 在内部不使用这个值;它只是将新的线程 ID 返回给调用者。您不需要动态分配该值;您可以改为传递局部变量的地址:

    pthread_t thread;
    pthread_create(&thread, NULL, someFunction, someArgument);
    

    【讨论】:

      【解决方案2】:

      您需要自己释放内存。最好将 pthread_t 变量简单地分配在堆栈上而不是堆上。

      【讨论】:

      • OP 的问题是认为因为pthread_create 采用pthread_t 参数,所以您需要一个指针变量来传递。这是 C 初学者的一个典型错误——声明指针变量作为参数使用,而不是传递 &foo
      猜你喜欢
      • 2013-03-25
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多