#include #include #include pthread_cond_t cond = PTHREAD_COND_INITIALIZER; pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; void t2cleanup (void *u) { puts ("cleanup!"); } void * t2 (void *u) { pthread_cleanup_push (&t2cleanup, NULL); pthread_mutex_lock (&mut); pthread_cond_wait (&cond, &mut); pthread_cleanup_pop (0); return NULL; } int main () { pthread_t foo; pthread_create (&foo, NULL, &t2, NULL); sleep(1); pthread_cancel (foo); pthread_join (foo, NULL); }