pthread_detach将为我管理我的内存吗?

时间:2020-03-06 14:44:37  来源:igfitidea点击:

假设我有以下代码:

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

分离的线程将释放由malloc分配的内存,还是我现在要做的事情?

解决方案

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

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

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