#include #include void * task(void * data) { pthread_mutex_t * mtx=(pthread_mutex_t *)data; int n; fprintf(stderr,"begin task() in %d\n", (int)pthread_self()); /* ugly cast ! */ for(n=0;n<2;n++) { unsigned long i; pthread_mutex_lock(mtx); /* begin critical section */ fprintf(stderr," thread %d -->\n", (int)pthread_self()); /* ugly cast ! */ for(i=0;i<10*1000*1000;i++) {} fprintf(stderr," thread %d <--\n", (int)pthread_self()); /* ugly cast ! */ pthread_mutex_unlock(mtx); /* end critical section */ } fprintf(stderr,"end task() in %d\n", (int)pthread_self()); /* ugly cast ! */ return((void *)0); } int main(void) { pthread_mutex_t mtx=PTHREAD_MUTEX_INITIALIZER; pthread_t th[3]; int i; void * result; for(i=0;i<3;i++) { if(pthread_create(&th[i],(pthread_attr_t *)0,task,&mtx)) { fprintf(stderr,"Pb create\n"); return(1); } } for(i=0;i<3;i++) { if(pthread_join(th[i],&result)) { fprintf(stderr,"Pb join\n"); return(1); } } if(pthread_mutex_destroy(&mtx)) { fprintf(stderr,"Pb mutex destroy\n"); return(1); } return(0); }