何时释放C语言中动态分配的pthread_t指针



我有一个进入case语句的代码块。如果遇到正确的情况,则需要创建一个新线程并继续执行工作。这个case语句可以多次调用,创建多个同时运行的线程。

因此,我认为我需要创建一个pthread_t*,为它malloc一些内存,然后调用pthread_create()。但是,我还需要释放pthread_t*吗?我不想造成内存泄漏。如果我需要释放它,我应该如何以及在哪里释放它?

,

case MY_CASE:
    ; 
    pthread_t* foo = (pthread_t*)malloc(sizeof(pthread_t));
    pthread_create(foo, NULL, SomeFunction, &SomeParameters);
   .
   .
   .
 later
   .
   .
   .
free(foo); // Should this be in the code? If so, where?
/* I need to ensure the main thread keeps running. So, I cannot use pthread_join() */

调用pthread_join(*foo, &retval);后释放内存

如果你想轮询所有的线程,看看他们是否完成,保持一个数组的开放句柄周围,并调用pthread_tryjoin_np对他们。然后调用free(并从数组中删除)指针上的线程已经终止。

或者,您可以在线程上调用pthread_detach。这样更便于移植,如果您不关心线程是否已经终止,那么它将工作得很好。在这种情况下,pthread_detach手册页是这样说的:

可以使用pthread_attr_setdetachstate(3)来设置pthread_create(3)的attr参数的detached属性来创建一个处于detached状态的新线程

你可以完全跳过malloc

最新更新