Основная проблема в том, что вы пропускаете звонок на
pthread_cleanup_pop(0)
после комментария «функция продолжается». Это приведет к сбою компилятора. Проверьте пример кода с помощью push / pop на opengroup.org .
У вас также есть несколько других проблем, как указано в других ответах.
Вот что-то, что хотя бы компилирует после исправления всех ошибок компилятора:
#include <pthread.h>
typedef struct struct_def {
/* data */
} struct_def;
struct_def *ptr_to_struct_def;
void cleanup (void *arg)
{
/* Do your cleanup for the thread here */
}
void *
thread_function(void *arg)
{
pthread_cleanup_push(cleanup, (void *)ptr_to_struct_def); /* correct? */
/* Function continues */
pthread_cleanup_pop (0);
}
int
main()
{
int err;
pthread_t tid;
err = pthread_create(&tid, NULL, thread_function, (void *)1);
/* main continues */
}