From ac9bb3129b7bb400ea49d49fba7e36c73e66c045 Mon Sep 17 00:00:00 2001 From: Rochas Date: Mon, 9 Dec 2024 18:57:40 +0100 Subject: [PATCH] correction Employe du buffet + Stand de cuisson refait avec un notify et wait --- rapport.txt | 13 +++++++------ src/Buffet.java | 21 +++++++++++++++++++++ src/Client.java | 25 +++++++++++++++++++------ src/Compartiment.java | 3 ++- src/Cuisinier.java | 23 ++++++++++++++++++++++- src/Employe_du_buffet.java | 33 +++++++++++++++++++++------------ src/Restaurant.java | 16 ++++++---------- src/Stand_de_cuisson.java | 23 +++++++++++++++++------ 8 files changed, 115 insertions(+), 42 deletions(-) create mode 100644 src/Buffet.java diff --git a/rapport.txt b/rapport.txt index 59a8940..6a50d50 100644 --- a/rapport.txt +++ b/rapport.txt @@ -16,15 +16,16 @@ Le run de Client va suivre ces étapes : (5) Sort, en faisant un notifyAll sur le restaurant pour prévenir tout autre thread client attendant pour entrer -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. +L'employer du buffet fait le tour de chaque Compartiment du Buffet, s'il y a un +un compartiment à moins de 100g alors il vérifie qu'il est libre (se met en wait sinon) +et le remplit. Après avoir fait un tour il fait bufet.sleep, le buffet le reveillera +après qu'un client se soit servi. Difficulté : Nous n'avons pas vraiment rencontré de difficulté, on a juste eu parfois quelque oublie (notifyAll manquant par exemple). On avait aussi commencé dans Stand_de_cuisson par faire une Queue, on a ensuite -décidé de simplement synchroniser le stand de cuisson et le client, qui est au final beaucoup plus simple, mais le verrou -n'est plus équitable, ce n'est plus le Client qui attend depuis le plus long temps -qui est prioritaire. \ No newline at end of file +décidé de simplement synchroniser le stand de cuisson et le client, qui est au final +beaucoup plus simple, mais le verrou n'est plus équitable, ce n'est plus le Client +qui attend depuis le plus long temps qui est prioritaire. \ No newline at end of file diff --git a/src/Buffet.java b/src/Buffet.java new file mode 100644 index 0000000..4560ff0 --- /dev/null +++ b/src/Buffet.java @@ -0,0 +1,21 @@ +public class Buffet { + + private Compartiment compartiment[]; + + Buffet(){ + compartiment = new Compartiment[4]; + this.compartiment[0] = new Compartiment("poisson"); + this.compartiment[1] = new Compartiment("viande"); + this.compartiment[2] = new Compartiment("légume"); + this.compartiment[3] = new Compartiment("nouille"); + } + + public Compartiment getCompartiment(int i){ + return compartiment[i]; + } + + public int length(){ + return compartiment.length; + } + +} diff --git a/src/Client.java b/src/Client.java index 7d7922f..fd2d503 100644 --- a/src/Client.java +++ b/src/Client.java @@ -13,8 +13,8 @@ public class Client extends Thread { public void run(){ try{ entrer(); - for(int i = 0; inbClient); diff --git a/src/Stand_de_cuisson.java b/src/Stand_de_cuisson.java index a987028..6c0fa65 100644 --- a/src/Stand_de_cuisson.java +++ b/src/Stand_de_cuisson.java @@ -1,12 +1,23 @@ public class Stand_de_cuisson { - private Cuisinier cuisinier; - - Stand_de_cuisson(Cuisinier cuisinier){ - this.cuisinier = cuisinier; + private Client client_courant; + + Stand_de_cuisson(){ + this.client_courant = null; } - public synchronized void faire_cuire_plat(Client client){ - this.cuisinier.faire_cuire(client); + public void entrerDansLaQueue(Client client_courant) { + notifyAll(); //pour réveiller de Cuisinier + this.client_courant = client_courant; } + + public Client getClient() { + return client_courant; + } + + public void cuissonFini(){ + this.client_courant = null; + notifyAll(); //prévient le client en attente, et les prochains client + } + }