Semestre 7‎ > ‎ISS7AC - OS‎ > ‎Archives‎ > ‎

TD "Concurrence et Synchronisation" du 21/09/2016

Nous vous proposons de programmer un simulateur de pizzeria en Java et qui correspond aux contraintes suivantes :
  • Une Pizzeria comporte principalement une cuisine dans laquelle opèrent de Commis et des Pizzaiolos.
  • Un Pizzaiolo fait des pizzas sur commande, en récupérant, dans 3 frigos différents, de la pâte, de la sauce tomate et du fromage.
  • Les Commis vérifient en continue l'état des frigos. Lorsqu'il détectent qu'un frigo est vide, il le remplissent.

Pour réaliser le simulateur, vous devez implémenter les classes suivantes : Client, Commis, Frigo, Cuisine et Pizzaiolo.

Les Client et Commis sont des Threads. Lorsqu'un Pizzaiolo veut faire une pizza mais l'un des frigos est vide, il doit attendre qu'un Commis le remplisse. Le Client commande aléatoirement des pizzas aux Pizzaiolos disponibles dans la Cuisine.

  1. Mettre en place un système d'exclusion mutuelle permettant à une Cuisine de fonctionner avec 3 Frigos et un nombre indéterminé de Commis et/ou de Pizzaiolos. Dans un premier temps, les Frigos seront des classes simples comme fournies ici (cf. bas de page). Il y aura donc 1 Frigo dédié à la pâte, 1 à la sauce tomate et 1 au fromage.
  2. Définir un protocole de validation permettant de vérifier qu'il n'y a aucune corruption de données ou d'interblocage, et que plusieurs Threads fonctionnent en même temps.
  3. Comment garantir qu'un frigo ne dépasse pas sa capacité de stockage ?
  4. Comment réaliser la contrainte suivante : après 10 remplissages d'un Frigo, le Commis doit nettoyer le frigo. Pour cela il doit attendre que le Frigo soit vide, puis il doit en bloquer l'accès pendant le temps nécessaire de le nettoyer. Pendant le nettoyage aucun autre Commis, ni Pizzaiolo ne peut y avoir accès.
  5. Modéliser maintenant les Frigos de façon à ce qu'ils peuvent contenir invariablement l'ensemble des ingrédients. Ils seront donc représentés par des collections contenant des objets de type "Pâte", "Sauce Tomage" ou "Fromage". Maintenir l'ensemble des propriétés de non-corruption des données, d'absence d'interblocage, etc.
ċ
Cuisine.java
(1k)
Bart Lamiroy,
20 sept. 2016 à 22:58
ċ
FrigoSimple.java
(0k)
Bart Lamiroy,
20 sept. 2016 à 22:57
ċ
Pizzaiolo.java
(0k)
Bart Lamiroy,
20 sept. 2016 à 22:58
Comments