From 9f6dabf19944fd585ca45a2c2e28f2afea1415ba Mon Sep 17 00:00:00 2001 From: Rochas Date: Sat, 7 Dec 2024 16:46:49 +0100 Subject: [PATCH] correction de bug, normalement tout marche + rapport --- rapport.txt | 28 +++++++++++++++++++++++++ src/Au_Wok.java | 10 +++++++++ src/Au_Woke.java | 18 ---------------- src/Client.java | 44 +++++++++++++-------------------------- src/Cuisinier.java | 23 +++++++++++++++----- src/Restaurant.java | 5 ++++- src/Stand_de_cuisson.java | 17 ++------------- 7 files changed, 77 insertions(+), 68 deletions(-) create mode 100644 rapport.txt create mode 100644 src/Au_Wok.java delete mode 100644 src/Au_Woke.java diff --git a/rapport.txt b/rapport.txt new file mode 100644 index 0000000..c327856 --- /dev/null +++ b/rapport.txt @@ -0,0 +1,28 @@ +Nous avons la Class Au_Wok qui contient le main(), on y initialise lesclients +ainsi que le restaurant, puis on start tous les clients. + +Le constructeur Restaurant initialise le Buffet, un tableau de 4 Compartiment +(poisson, viande, légume et nouille), le stand de cuisson, l'Employe_du_buffet +et le Cuisinier. Il star en suite start ces deux derniers. + +Le run de Client va suivre ces étapes : + (1) Entrer dans le restaurant en vérifiant bien que le restaurant est libre + (2) Prendre une portion de chaque Compartiment du buffet, en vérifiant + le verrou du compartiment est libre avant de lui-même le verrouiller, après + c'être servi il déverrouille fait un notifyAll pour réveiller les clients + ou l'employer du buffet qui pourrait attendre. + (3) Cuire au stand, en se mettant dans la queue (il notifyAll le stand pour + réveiller le cuisinier), quand son plat est cuit le cuisinier le sort de la + queue (le stand fait un notifyAll pour réveiller le client) + (4) Manger + (5) Sort, en faisant un notifyAll sur le restaurant pour prévenir tout autre + thread client attendant pour entrer + +Le run du cuisinier, fait une boucle pour vérifier si un client est présent en +tête de la queue du stand de cuisson. Si oui, alors il fait cuire son plat. +Une fois fini, il sort le client le la queue et fait faire un notifyAll au stand +pour prévenir le client que son plat est fini. + +L'employer du buffet fait le tour de chaque compartiment du buffet, s'il y a un +un buffet à moins de 100g alors il vérifie qu'il est libre (se met en wait sinon) +et le remplit. \ No newline at end of file diff --git a/src/Au_Wok.java b/src/Au_Wok.java new file mode 100644 index 0000000..c9b7a67 --- /dev/null +++ b/src/Au_Wok.java @@ -0,0 +1,10 @@ +public class Au_Wok { + public static void main(String[] args){ + Client[] clients= new Client[30]; + Restaurant restaurant =new Restaurant(); + for(int i=0; inbClient); diff --git a/src/Stand_de_cuisson.java b/src/Stand_de_cuisson.java index 8e92cb0..6f10666 100644 --- a/src/Stand_de_cuisson.java +++ b/src/Stand_de_cuisson.java @@ -4,19 +4,6 @@ import java.util.Queue; public class Stand_de_cuisson { private Queue clients = new LinkedList(); - /* - * retourne le client qui est en tête de queue et le supprime de la queue - */ - public synchronized Client getNextClient2(){ - while(clients.isEmpty()){ - try{ - wait(); - }catch (InterruptedException e) { - e.printStackTrace(); - } - } - return clients.poll(); - } //get le client en tête de queue public synchronized Client getClient(){ @@ -28,13 +15,13 @@ public class Stand_de_cuisson { clients.poll(); } - public synchronized void finir_cuit(Client client){ + public synchronized void finir_cuit(){ notifyAll(); } public synchronized void ajouter_client(Client client){ clients.add(client); - notify(); + notifyAll(); } public synchronized boolean containsClient(Client client){