Université Abdelmalek Essaadi Ecole Ntionale des Sciences Appliquées Tétouan An
Université Abdelmalek Essaadi Ecole Ntionale des Sciences Appliquées Tétouan Année Univ. : 2019-20 Module : Prog des Systèmes 3ème année G. Informatique Y.EL KHAMLICHI 1/4 Programmation Parallèle : Java DEVOIR à Rendre avant 12/12/2019 Problème 1 : Diner des philosophes 5 philosophes sont à table et effectuent des cycles : penser en attendant les fourchettes, manger, poser les fourchettes, penser. Ces philosophes mangent des spaghetti avec 2 fourchettes chacun, celles situées à gauche et à droite de l’assiette. Or il n’y a que 5 fourchettes. La disposition est la suivante : Un Philosophe possède un identifiant entier, un lien vers les fourchettes, un nombre de bouchées à ingurgiter, un temps minimum pour avaler une bouchée, un temps variable pour mastiquer, un temps minimum pour réfléchir, un temps variable pour divaguer. Un philosophe effectue un cycle tant qu’il n’a pas mangé toutes ses bouchées : demande de fourchettes (pense en attendant les fourchettes) dégustation repose de fourchettes penser. L’objet partagé entre les philosophes est un objet de type Fourchettes. Cette classe comprend un tableau de n fourchettes. On suppose que cette classe propose les méthodes : void prendre(int noPhilo) appelée lorsqu’un philosophe demande des fourchettes void deposer(int noPhilo) appelée lorsqu’un philosophe repose les fourchettes L’accès aux fourchettes doit être synchronisé, c’est à dire qu’un seul processus a le droit d’entrer dans les méthodes déposer et prendre : Philo0 Philo1 Philo2 Philo3 Philo4 F1 F2 F3 F4 F0 Université Abdelmalek Essaadi Ecole Ntionale des Sciences Appliquées Tétouan Année Univ. : 2019-20 Module : Prog des Systèmes 3ème année G. Informatique Y.EL KHAMLICHI 2/4 public synchronized void prendre(int no) et public synchronized void deposer(int no). public class Philosophe extends Thread { int no; /** no du philosophe */ int nbBouchees; /** nb de bouchees restantes dans l'assiette */ long debut; /** date de debut du diner */ double tempsTotalRepas; /** temps total du repas pour le philosophe*/ Fourchettes lesFourchettes; /** liste de fourchettes */ static final int TempsBaseBouchee=100;/**temps min d'une bouchee en milliseconde*/ static final int TempsBouchee=500; /**temps max en plus pour une bouchee en milliseconde*/ static final int TempsMinPensee=100;/**temps min d'une pensee en milliseconde*/ static final int TempsPensee=500;/**temps max en plus pour une pensee en milliseconde*/ Philosophe() { } /** initialise fini a true*/ /** initialise le no, le nb de bouchees, le lien vers les fourchettes */ Philosophe(int _no, int _nbBouchees, Fourchettes _lesFourchettes) { super("philo"+_no); no = _no; nbBouchees = _nbBouchees; lesFourchettes = _lesFourchettes; } /** initialise le groupe, le no et nb de bouchees, le lien vers les fourchettes */ */ Philosophe(ThreadGroup groupe, int _no, int _nbBouchees, Fourchettes _lesFourchettes) { super(groupe, "philo"+_no); no = _no; nbBouchees = _nbBouchees; lesFourchettes = _lesFourchettes; fini = false; } /** fonction principale du philosophe : faire nb Bouchees cycle de : * prendre des fourchettes; * attendre entre 100 et 600 ms, (TempsBaseBouchee et TempsBaseBouchee + TempsBouchee); * poser les fourchettes; * attendre entre 100 et 600 ms, (TempsBasePensee et TempsBasePensee + TempsPensee) * */ public void run() { // 1. Compléter le code suivant } } Si ’n’ est le nombre total de philosophes et de fourchettes, le philosophe ’no’ mange avec les fourchettes ’no’ et ’(no+1)%n’. 2. Définir la classe Fourchettes contenant : lesFourchettes : un tableau de n booléens (lesFourchettes[i] == true signifie que la fourchette ’i’ est libre) taille : un entier correspondant au nombre de fourchettes (la taille du tableau) Université Abdelmalek Essaadi Ecole Ntionale des Sciences Appliquées Tétouan Année Univ. : 2019-20 Module : Prog des Systèmes 3ème année G. Informatique Y.EL KHAMLICHI 3/4 public Fourchettes(int _taille) qui crée le tableau de fourchettes et initialise l’ensemble du tableau à true. les méthodes ’prendre’ et ’déposer’, en suivant l’exemple des producteurs consommateurs vu en cours. 3. Donner le programme principal. Problème 2 : L’activité humaine regorge de situations où les êtres humains doivent se synchroniser pour accomplir une activité. Un baigneur se rendant à la piscine doit aussi tenir compte des autres et se synchroniser par rapport à eux. Il doit attendre s’il n’y a plus de panier pour y mettre ses vêtements ; il doit attendre si toutes les cabines sont occupées. Son activité peut se résumer comme suit : processus baigneur arriver à la piscine P (panier) Puis-je prendre un panier ? prendre un panier P (cabine) Puis-je avoir une cabine ? choisir une cabine (déshabillage) V (cabine) Libérer la cabine se baigner P (cabine) Puis-je avoir une cabine ? choisir une cabine (rhabillage) V (cabine) Libérer la cabine V (panier) Rendre le panier quitter la piscine Chaque thread baigneur écrit son numéro et son état dans un tube commun à tous les baigneurs. Un autre thread DessinBaigneur est chargé de la présentation des résultats. Il suffit de changer ce thread pour avoir une présentation différente des résultats. Ci- après, les résultats sont visualisés graphiquement. 53 24 12 Thread DessinBaigneur Thread Baigneur 3 Thread Baigneur 2 Thread Baigneur 1 PipedOutStream po PipedInputStream pi Université Abdelmalek Essaadi Ecole Ntionale des Sciences Appliquées Tétouan Année Univ. : 2019-20 Module : Prog des Systèmes 3ème année G. Informatique Y.EL KHAMLICHI 4/4 Les threads Baigneur écrivent dans le tube leur numéro et leur état (le baigneur 1 est dans l’état 2, le baigneur 2 dans l’état 4, etc.). Le processus DessinBaigneurs lit dans le tube les résultats de la simulation et affiche graphiquement l’état de chaque processus. Les attributs panier, cabine et po sont static. Etat/Baigneur A B C D E F H arrive + + + + + + + panier + + + + + + + déshabillage + + + + + Baigne + + + + S’habille + + quitte Une fois un baigneur quitte, son couloir dans la piscine, son panier, sa cabine, se libère. Donner les classes Baigneur, DessinBaigneur et programme principal. uploads/Philosophie/ devoir-a-rendre-12-12 1 .pdf
Documents similaires
-
14
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jul 15, 2022
- Catégorie Philosophy / Philo...
- Langue French
- Taille du fichier 0.8147MB