Vous êtes sur la page 1sur 4

Université Abdelmalek Essaadi Année Univ.

: 2019-20
Ecole Ntionale des Sciences Appliquées Module : Prog des Systèmes
Tétouan 3ème année G. Informatique

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 :

Philo0
F0 F1

Philo4 Philo1

F4 F2

Philo3 F3 Philo2
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 :

Y.EL KHAMLICHI 1/4


Université Abdelmalek Essaadi Année Univ. : 2019-20
Ecole Ntionale des Sciences Appliquées Module : Prog des Systèmes
Tétouan 3ème année G. Informatique

 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)

Y.EL KHAMLICHI 2/4


Université Abdelmalek Essaadi Année Univ. : 2019-20
Ecole Ntionale des Sciences Appliquées Module : Prog des Systèmes
Tétouan 3ème année G. Informatique

 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.
Thread
Baigneur 1
Thread
Thread 53 24 12 DessinBaigneur
Baigneur 2
PipedOutStream po
Thread PipedInputStream pi
Baigneur 3

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.

Y.EL KHAMLICHI 3/4


Université Abdelmalek Essaadi Année Univ. : 2019-20
Ecole Ntionale des Sciences Appliquées Module : Prog des Systèmes
Tétouan 3ème année G. Informatique

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.

Y.EL KHAMLICHI 4/4