/* cancellazione differita dei thread */ #include #include int i; void *thread(void *arg) { i = 0; if (arg) pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); for (; i<50000000; i++); pthread_testcancel(); printf("NON terminato!!!\n"); return NULL; } int main() { pthread_t mythread; pthread_attr_t myattr; int err; pthread_attr_init(&myattr); err = pthread_create(&mythread, &myattr, thread, NULL); pthread_attr_destroy(&myattr); pthread_join(mythread, NULL); printf("Non cancellato: i=%d\n",i); pthread_attr_init(&myattr); err = pthread_create(&mythread, &myattr, thread, NULL); pthread_attr_destroy(&myattr); pthread_cancel(mythread); pthread_join(mythread, NULL); printf("Cancellazione differita: i=%d\n",i); pthread_attr_init(&myattr); err = pthread_create(&mythread, &myattr, thread, (void *)1); pthread_attr_destroy(&myattr); pthread_cancel(mythread); pthread_join(mythread, NULL); printf("Cancellazione asincrona: i=%d\n",i); return 0; }