Я хочу сделать функцию асинхронной (функция установки просто вызывает реальную функцию, без возврата статуса), но я не хочу усложнять ситуацию с массивом потоков и дополнительным мьютексом для защиты индекса.
Я попытался просто разрешить небольшую утечку памяти путем неправильного размещения и потери переменной потока в куче, но это, похоже, вызывает segfault каждый раз (кто-нибудь может сказать, почему?).
Это небольшая простая программа (которую я бы предпочел не усложнять), и эту функцию вряд ли можно будет вызывать> 100 раз, но я бы предпочел избежать утечки памяти или лишних блокировок.
* pthread_t определен как unsigned long в linux, и он не должен быть переносимым
Постскриптум есть ли способ, чтобы free (thread) вызывался в конце потока без блокировки?
пример кода утечки:
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);
}