#include #include void * task(void * data) { int * flag=(int *)data; unsigned long i; /* pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,(int *)0); */ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,(int *)0); /* pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,(int *)0); */ pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,(int *)0); fprintf(stderr,"task begin\n"); for(i=0;i<200*1000*1000;i++) {} (*flag)++; pthread_testcancel(); (*flag)++; fprintf(stderr,"task end\n"); return((void *)0); } int main(void) { pthread_attr_t attr; pthread_t th; int flag=0; int pb=0; unsigned long i; if(!pb) pb|=pthread_attr_init(&attr); if(!pb) pb|=pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); if(!pb) pb|=pthread_create(&th,&attr,task,&flag); if(!pb) pb|=pthread_attr_destroy(&attr); for(i=0;i<100*1000*1000;i++) {} pthread_cancel(th); for(i=0;i<200*1000*1000;i++) {} fprintf(stderr,"quit (flag=%d)\n",flag); return(pb); }