From c92ba8c0f4b7374c5592546c06c464de5dd63c9f Mon Sep 17 00:00:00 2001 From: trochas Date: Sun, 8 Dec 2024 13:38:07 +0100 Subject: [PATCH] =?UTF-8?q?le=20Client=20utilise=20un=20sm=C3=A9aphore=20p?= =?UTF-8?q?our=20cuir=20son=20plat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Client.java | 9 +-------- src/Cuisinier.java | 28 +--------------------------- src/Restaurant.java | 24 ++---------------------- src/Stand_de_cuisson.java | 28 +++++----------------------- 4 files changed, 9 insertions(+), 80 deletions(-) diff --git a/src/Client.java b/src/Client.java index fb4f952..7d7922f 100644 --- a/src/Client.java +++ b/src/Client.java @@ -82,16 +82,9 @@ public class Client extends Thread { } public void cuir_au_stand(Stand_de_cuisson stand){ - stand.ajouter_client(this); System.out.println(this.getNameClient() + " : attend pour faire cuir son plat"); synchronized(stand){ - try{ - while(stand.containsClient(this)){ - stand.wait(); - } - }catch (InterruptedException e){ - e.printStackTrace(); - } + stand.faire_cuire_plat(this); } System.out.println(this.getNameClient() + " : le plat est cuit"); diff --git a/src/Cuisinier.java b/src/Cuisinier.java index a1f5b71..605b1d1 100644 --- a/src/Cuisinier.java +++ b/src/Cuisinier.java @@ -1,35 +1,11 @@ import java.util.Random; public class Cuisinier extends Thread { - private Stand_de_cuisson stand; - public Cuisinier(Stand_de_cuisson stand_de_cuisson){ - this.stand= stand_de_cuisson; + public Cuisinier(){ this.setDaemon(true); } - public void run(){ - while(Thread.currentThread().isDaemon()){ - attendreClient(); - } - } - - private void attendreClient(){ - Client client = stand.getClient(); - synchronized(stand){ - try{ - while(client==null){ - stand.wait(); - client= stand.getClient(); - } - } - catch(InterruptedException e){ - e.printStackTrace(); - } - } - faire_cuire(client); - } - public void faire_cuire(Client client){ System.out.println("# Cuisinier : fait cuire le plat de " + client.getNameClient()) ; try{ @@ -39,7 +15,5 @@ public class Cuisinier extends Thread { e.printStackTrace(); } System.out.println("# Cuisinier : a fini de cuire le plat de " + client.getNameClient()) ; - stand.nextClient(); - stand.finir_cuit(); } } diff --git a/src/Restaurant.java b/src/Restaurant.java index 5f7c8b8..add0e1f 100644 --- a/src/Restaurant.java +++ b/src/Restaurant.java @@ -7,27 +7,8 @@ public class Restaurant { public Employe_du_buffet employeB; public Stand_de_cuisson stand_de_cuisson; public Cuisinier cuisinier; - /* - private Client[] clients= new Client[MAX_CLIENTS+5]; - Restaurant(){ - nbClient = 0; - for(int i = 0 ; inbClient); diff --git a/src/Stand_de_cuisson.java b/src/Stand_de_cuisson.java index 6f10666..a987028 100644 --- a/src/Stand_de_cuisson.java +++ b/src/Stand_de_cuisson.java @@ -1,30 +1,12 @@ -import java.util.LinkedList; -import java.util.Queue; - public class Stand_de_cuisson { - private Queue clients = new LinkedList(); + private Cuisinier cuisinier; - //get le client en tête de queue - public synchronized Client getClient(){ - return clients.peek(); + Stand_de_cuisson(Cuisinier cuisinier){ + this.cuisinier = cuisinier; } - //supprime le client en tête de queue - public synchronized void nextClient(){ - clients.poll(); - } - - public synchronized void finir_cuit(){ - notifyAll(); - } - - public synchronized void ajouter_client(Client client){ - clients.add(client); - notifyAll(); - } - - public synchronized boolean containsClient(Client client){ - return this.clients.contains(client); + public synchronized void faire_cuire_plat(Client client){ + this.cuisinier.faire_cuire(client); } }