何时释放C中动态分配的pthread\u t指针?

何时释放C中动态分配的pthread\u t指针?,c,pthreads,C,Pthreads,我有一段代码,可以输入case语句。如果遇到正确的情况,我需要创建一个新线程并继续执行工作。这个case语句可以多次调用,从而创建多个同时运行的线程 因此,我认为我需要创建一个pthread_t*,为它分配一些内存,然后调用pthread_create()。但是,我是否仍然需要释放pthread_t*?我不想造成内存泄漏。如果我需要释放它,我应该如何以及在哪里释放它 例: 调用pthread_join(*foo,&retval)后释放内存 如果您希望轮询所有线程以查看它们是否完成,请保留一个打开

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

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

例:


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

如果您希望轮询所有线程以查看它们是否完成,请保留一个打开的句柄数组并调用它们。然后调用
free
打开(并从数组中删除)已终止线程的指针

或者,您可以调用您的线程。这更便于移植,如果您不关心线程是否已终止,它将很好地工作。那么,,
pthread\u detach
手册页说明:

可以使用设置的attr参数的detached属性,在分离状态下创建新线程


您可以完全跳过
malloc

是否加入您的线程?如果是的话,我相信在您完成之后。不,我不能使用pthread_join(),因为我需要执行主线程才能继续。使用join将挂起主线程,直到目标线程终止。只要没有线程需要它,就可以使用
free()
释放结构,如图所示。但是,如果您不知道是否存在该结构所描述的线程,则在可靠地释放它时会遇到问题。因此,可能会分离线程并跟踪它们何时返回并在释放后释放。如果不合并线程,则应首先创建它并将其分离。根据,pthread_t是一种算术类型,因此应该没有内部内存泄漏。鉴于这个问题的局限性,我根本不会使用动态分配。创建已分离的线程并发送临时
pthread\u t tid
按地址发送到
pthread\u create()
。但是,pthread\u join将挂起,直到子线程终止。我需要父线程才能继续。@Maxthecat:我刚才看到了。更新。
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() */