Из комментариев я узнал, что структура pthread_t
не обязана быть «живой» в течение всего потока (что я и думал и почему я использовал malloc); переменная стека в порядке. То, что я закончил, было основано на комментарии Джейсона Коко:
#include <pthread.h>
static void * worker_thread(void *);
void start_worker(void * arg)
{
pthread_t tmp;
(void)pthread_create(& tmp, NULL, worker_thread, arg))
}
static void * worker_thread(void * p)
{
/* do work */
/* finished work */
pthread_detach(pthread_self());
return (p);
}