rapport
This commit is contained in:
59
rapport.txt
59
rapport.txt
@@ -1,32 +1,8 @@
|
|||||||
Thibaut ROCHAS
|
Thibaut ROCHAS
|
||||||
Tuan Minh VU
|
Tuan Minh VU
|
||||||
|
|
||||||
Nous avons la Class Au_Wok qui contient le main(), on y initialise les clients
|
|
||||||
ainsi que le restaurant, puis on start tous les clients.
|
|
||||||
|
|
||||||
Le constructeur Restaurant initialise le Buffet : le Buffet qui initialise dans
|
|
||||||
son constructeur les 4 Compartiment (poisson, viande, légume et nouille), le
|
|
||||||
stand de cuisson, le Cusinier, l'Employe_du_buffet. Puis il star en suite start
|
|
||||||
l'employé du buffet.
|
|
||||||
|
|
||||||
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
|
|
||||||
sémaphore du compartiment est libre avant de lui-même le verrouiller,
|
|
||||||
après s'être servi il déverrouille.
|
|
||||||
Et fais aussi un notify sur le buffet pour que l'employé du buffet
|
|
||||||
puisse refaire un tour des compartiments.
|
|
||||||
(3) Cuire au stand, en se synchronisant avec le stand de cuisson.
|
|
||||||
(4) Manger
|
|
||||||
(5) Sort, en faisant un notifyAll sur le restaurant pour prévenir tout autre
|
|
||||||
thread client attendant pour entrer
|
|
||||||
|
|
||||||
L'employé 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
|
|
||||||
desus sinon) et le remplit. Après avoir fait un tour il fait sleep sur le buffet,
|
|
||||||
le buffet le réveillera à chaque fois qu'un client se soit servi.
|
|
||||||
|
|
||||||
Difficulté :
|
Difficulté :
|
||||||
|
|
||||||
On avait commencé dans Stand_de_cuisson par faire une Queue, on a ensuite
|
On avait 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
|
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
|
final beaucoup plus simple, mais le verrou n'est plus équitable, ce n'est plus le
|
||||||
@@ -34,3 +10,36 @@ Client qui attend depuis le plus long temps qui est prioritaire.
|
|||||||
Pour les compartiments, nous n'avons pas commencé par faire avec un sémaphore mais
|
Pour les compartiments, nous n'avons pas commencé par faire avec un sémaphore mais
|
||||||
nous nous sommes rendus compte que ça pouvait entraîner des problèmes de
|
nous nous sommes rendus compte que ça pouvait entraîner des problèmes de
|
||||||
synchronisation (par exemple en forçant les client a vider les compartiment)
|
synchronisation (par exemple en forçant les client a vider les compartiment)
|
||||||
|
|
||||||
|
Explication code :
|
||||||
|
|
||||||
|
Nous avons la Class Au_Wok qui contient le main(), on y initialise les clients
|
||||||
|
ainsi que le restaurant, puis on start tous les clients.
|
||||||
|
|
||||||
|
Le constructeur Restaurant initialise le Buffet : le Buffet qui initialise dans
|
||||||
|
son constructeur les 4 Compartiment (poisson, viande, légume et nouille), le
|
||||||
|
stand de cuisson, le Cuisinier, l'Employe_du_buffet. Puis il peut star l'employé
|
||||||
|
du buffet et le Cuisinier.
|
||||||
|
|
||||||
|
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 que
|
||||||
|
le sémaphore du compartiment est libre avant de lui-même le verrouiller,
|
||||||
|
après s'être servi il libère le sémaphore.
|
||||||
|
Et fais aussi un notify sur le buffet pour que l'employé du buffet
|
||||||
|
puisse refaire un tour des compartiments.
|
||||||
|
(3) Cuire au stand, il "fait la queue" en attendant que la palce se libère,
|
||||||
|
il wait sur le stand de cuisson en attendant d'être notify.
|
||||||
|
(4) Manger
|
||||||
|
(5) Sort, en faisant un notifyAll sur le restaurant pour prévenir tout autre
|
||||||
|
thread client attendant pour entrer
|
||||||
|
|
||||||
|
L'employé 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 (sémaphore) et
|
||||||
|
le remplit. Après avoir fait un tour il fait sleep sur le buffet, le buffet le
|
||||||
|
réveillera à chaque fois qu'un client se soit servi.
|
||||||
|
|
||||||
|
Le Cusinier attend qu'il y est un client, si non il dors en écoutant le stand de
|
||||||
|
cuisson. Quand un client est là il fait cuir son plat puis notifyAll pour pévenir
|
||||||
|
à la fois le cient qui faisait cuir son plat et tout les client en attente.
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ public class Client extends Thread {
|
|||||||
Compartiment compartiment = this.restaurant.buffet.getCompartiment(i);
|
Compartiment compartiment = this.restaurant.buffet.getCompartiment(i);
|
||||||
Boolean servi = false;
|
Boolean servi = false;
|
||||||
int r =new Random().nextInt(MAX_PORTION);
|
int r =new Random().nextInt(MAX_PORTION);
|
||||||
//int r = Math.max(compartiment.getQuantite(),69); //TODO
|
|
||||||
while(!servi){
|
while(!servi){
|
||||||
try{
|
try{
|
||||||
compartiment.getSemaphore().acquire();
|
compartiment.getSemaphore().acquire();
|
||||||
|
|||||||
Reference in New Issue
Block a user