#include #include #include #include #define N 3 // nombre de processus de type lecteur et de type redacteur #define ACCES 1 // nomber demande d'acces au BDD int NbL = 0 ; sem_t SBDD ; sem_t mutex ; void * lecteur( void *num ) ; void * redacteur( void *num ) ; int main() { printf (" Etat intiale : la < BDD est libre > // BDD : base de données \n"); int i; pthread_t Pred[N] ; // tableau de thread (processus) de N redacteur pthread_t Plec[N] ; // tableau de thread (processus) de N Lecteur sem_init(&mutex,0,1) ; sem_init(&SBDD,0,1) ; for ( i = 0 ; i | il y a %d processus Lecteurs en BDD \n",i,NbL) ; sleep(1) ; // Lecture de la base de données // fin de l'acces à la BDD sem_wait(&mutex) ; // Signale la fin de l'accès à la BDD NbL--; printf(" PL%d sort de la BDD \n",i) ; if(!NbL) { printf (" ( BDD est libre : sortie de tous les processus Lecteurs ) \n"); sem_post(&SBDD) ; } sem_post(&mutex) ; //traitement des édonnes lue s } while(x--) ; } void * redacteur(void *num) { int i = * (int *) num; int x=ACCES; do { printf ( " PR%d demande écrire en BDD \n" , i ) ; sem_wait(&SBDD ) ; printf ( " \t\t < PR%d ecrir en BDD >\n" , i ) ; sleep(1) ; // Ecrire ou modifier le donneés de la BDD printf ( " PR%d sort de BDD \n" , i ) ; printf (" ( BDD est libre : sortie d'un Redacteur ) \n"); sem_post(&SBDD ); } while(x--) ; }