#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <semaphore.h> static sem_t mon_sem; int the_end; void *thread1(void *arg) { while(!the_end) { printf("j'attends une place ! \n"); sem_wait(&mon_sem); printf("je rentre dans le parking ! \n"); sleep(1); // printf("je sors du parking ! \n"); sem_post(&mon_sem); } printf("Parking plein !\n"); pthread_exit(0); } void *thread2(void *arg) { register int i; for(i=0; i<5; i++) { printf("voiture %d !\n", i); sem_post(&mon_sem); sleep(1); } the_end = 1; sem_post (&mon_sem); /*pour débloquer le dernier sem_wait*/ pthread_exit(0); } int main(int argc, char **argv) { pthread_t th1, th2; void *ret; sem_init(&mon_sem, 0, 0); if(pthread_create(&th1,NULL,thread1,"1") < 0) { fprintf(stderr, "erreur thread 1 \n"); exit(1); } if(pthread_create(&th2,NULL,thread2,"2") < 0) { fprintf(stderr, "erreur thread 2 \n"); exit(1); } (void)pthread_join(th1, &ret); (void)pthread_join(th2, &ret); return 0; }
|