#include #include #include #include #include #include #include /* declaration des variables partagées */ pthread_mutex_t mutex ; /* declaration d'un mutex */ pthread_cond_t pingcondition ; /* declaration d'une condition == file d'attente*/ pthread_cond_t pongcondition; /* declaration d'une condition == file d'attente*/ int TOUR ; /* variable qui dit si c'est mon tour ou pas */ /* Definition des constantes */ void * ping(void *bidon); void * pong(void *bidon); void *ping(void *bidon) { pthread_mutex_lock(&mutex); while (TOUR != 1) pthread_cond_wait(&pingcondition,&mutex) ; printf("PING\n") ; TOUR=0; /* j'ai travaillé donc je donne la main à l'autre : tu peux travailler c'est ton tour */ pthread_cond_signal(&pongcondition); pthread_mutex_unlock(&mutex); return NULL ; } void *pong(void *bidon) { pthread_mutex_lock(&mutex); while(TOUR != 0) pthread_cond_wait(&pongcondition,&mutex) ; printf("PONG\n") ; TOUR = 1; pthread_cond_signal(&pingcondition); pthread_mutex_unlock(&mutex); return NULL ; } /* programme principal */ int main (int nbParam, char * TabParam[]) { int i ; /* declaration des thread */ pthread_t thread_ping [10]; pthread_t thread_pong [10]; /* creation du tread ping*/ for(i =0; i<10;i++) { pthread_create(&thread_ping[i],NULL,ping,NULL); pthread_create(&thread_pong[i],NULL,pong,NULL); } /* On va bloquer le tread initail pour attendre la fin des thread */ for (i = 0; i<10; i++) { pthread_join(thread_ping[i],NULL); pthread_join(thread_pong[i],NULL); } exit (0); }