rapport pour sémaphore

This commit is contained in:
trochas
2024-12-08 13:40:51 +01:00
parent c92ba8c0f4
commit e3dc8dfe9a

View File

@@ -1,9 +1,9 @@
Nous avons la Class Au_Wok qui contient le main(), on y initialise les clients 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. ainsi que le restaurant, puis on start tous les clients.
Le constructeur Restaurant initialise le Buffet, un tableau de 4 Compartiment 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 (poisson, viande, légume et nouille), le Cusinier, le stand de cuisson,
et le Cuisinier. Il star en suite start ces deux derniers. l'Employe_du_buffet. Puis il star en suite start l'employer du buffet.
Le run de Client va suivre ces étapes : Le run de Client va suivre ces étapes :
(1) Entrer dans le restaurant en vérifiant bien que le restaurant est libre (1) Entrer dans le restaurant en vérifiant bien que le restaurant est libre
@@ -11,22 +11,20 @@ Le run de Client va suivre ces étapes :
le verrou du compartiment est libre avant de lui-même le verrouiller, après 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 c'être servi il déverrouille fait un notifyAll pour réveiller les clients
ou l'employer du buffet qui pourrait attendre. ou l'employer du buffet qui pourrait attendre.
(3) Cuire au stand, en se mettant dans la queue (il notifyAll le stand pour (3) Cuire au stand, on utilise un sémaphore.
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 (4) Manger
(5) Sort, en faisant un notifyAll sur le restaurant pour prévenir tout autre (5) Sort, en faisant un notifyAll sur le restaurant pour prévenir tout autre
thread client attendant pour entrer 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 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) un buffet à moins de 100g alors il vérifie qu'il est libre (se met en wait sinon)
et le remplit. et le remplit.
Difficulté : Difficulté :
Nous avons pas vraiment rencontré de difficulté, on a juste eu parfois quelque Nous n'avons pas vraiment rencontré de difficulté, on a juste eu parfois quelque
oublie (notifyAll manquant par exemple) oublie (notifyAll manquant par exemple).
On avait aussi commencé dans Stand_de_cuisson par faire une Queue, on a ensuite
remplacé par un sémaphore, 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.