/* * Programme de simulation de "Pirates" * "Pirates" pose un problème de type Lecteur/rédacteur avec un besoin de * priorités égales entre le rédacteur et les lecteurs, Barbe-Noire étant * le rédacteur, ses lieutenants étant des lecteurs. */ #include #include #include #include #include /* * Definition des pirates */ typedef struct { char nom[32];/* Nom du pirate */ int nbFois; /* Nb fois que le pirate a son comportement */ int ta; /* Valeur du temps t indice a */ int tc; /* Valeur du temps t indice c */ } pirate_t; /* Barbe-Noire */ pirate_t barbeNoire = {"Barbe-Noire", 10, 5, 3}; /* Lieutenants */ #define NBLIEUTENANT 3 pirate_t lieutenant[NBLIEUTENANT] = { {"Le Borgne" , 10, 1, 1}, {"Long Jean d'Argent", 10, 2, 2}, {"Rackham le Rose" , 10, 4, 4} }; /* * Variables liées au paradigme lecteur/rédacteur (les noms sont repris * du cours). */ /* Compteur du nombre de lecteurs */ int nl = 0; /* Les différents sémaphores */ sem_t mutexG; sem_t mutexL; sem_t fifo; /* * Procédure de simultation du comportement du lieutenant numéro num */ void *lieut(void *parametre){ int num = (int) parametre; int i; for (i=0 ; i on prend le */ /* rôle de Barbe-Noire */ barbe(); /* Barbe-Noire attend que tous ses lieutenants soient morts avant de */ /* mourir */ for (i=0 ; i