Asynchronous 有没有一种使用pthread\u t变量的简单方法?(多次调用线程生成函数)

Asynchronous 有没有一种使用pthread\u t变量的简单方法?(多次调用线程生成函数),asynchronous,pthreads,Asynchronous,Pthreads,我想使函数异步(设置函数只调用实函数,不返回状态),但我不想用线程数组和额外的互斥来保护索引,使事情复杂化。 我试着通过在堆上mallock和loose一个线程变量来允许一个小的内存泄漏,但这似乎每隔一次就会出错(有人知道为什么吗?)这是一个简单的小程序(我不想再让它复杂化),函数调用次数不太可能超过100次,但我希望避免内存泄漏或额外锁 *pthread_t在linux中被定义为unsigned long,并且不必是可移植的 另外,有没有一种方法可以在线程结束时调用free(线程)而不阻塞

我想使函数异步(设置函数只调用实函数,不返回状态),但我不想用线程数组和额外的互斥来保护索引,使事情复杂化。
我试着通过在堆上mallock和loose一个线程变量来允许一个小的内存泄漏,但这似乎每隔一次就会出错(有人知道为什么吗?)
这是一个简单的小程序(我不想再让它复杂化),函数调用次数不太可能超过100次,但我希望避免内存泄漏或额外锁

*pthread_t在linux中被定义为unsigned long,并且不必是可移植的 另外,有没有一种方法可以在线程结束时调用free(线程)而不阻塞


泄漏代码示例:

void * real_func(void *t)
{
    pthread_mutex_lock(t->something);
    ...
    pthread_mutex_unlock(t->something)l
}

void async_func(type_a *a, type_a *b)
{
pthread_t * thr = malloc(sizeof(pthread_t));
struct two_type_as t;
two_type_as.a=a;
two_type_as.b=b;

pthread_create(thr, NULL, real_func, &t);
}

请发布真实的代码-你发布的内容有足够多的错误,很难知道什么与你的问题相关,什么只是打字错误和不相关的垃圾,因为它不在你的真实代码中。例如,线程函数真的是
func
(未显示),还是我们应该假设您的意思是
real\u func
?您是否真的将
&thr
传递给
pthread\u create()
?它不应该编译,因为它的类型为
pthread\u t**
。你真的在向线程func传递一个指向局部变量的指针吗(这可能至少是你的一个bug——如果你真的这么做的话)?抱歉,修复了这两个问题。目前无法访问真正的代码。如果你不关心状态,也不与tid做任何其他事情,为什么还要麻烦它呢?只需将pthread_t保留为本地变量,并在async_func返回时将其从堆栈中弹出即可?或者只创建分离的线程。我已经分离了它,并使用pthread作为本地变量(我不确定它是否可以工作,但它似乎可以)。现在我发现问题在于将作为void*传递的包装器结构分配给堆栈上的函数,因此我将其malloce并在线程内释放,不再使用segfault。