From 87d2d3888a13d30758ed0ca90e6220efc3b36091 Mon Sep 17 00:00:00 2001 From: Auguste <auguste.celerier@imt-atlantique.net> Date: Mon, 3 Feb 2025 18:47:03 +0100 Subject: [PATCH] exo 3 --- README.md | 24 ++++++++++++++++++++++++ src/train/Railway.java | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index aed0d03..53854dc 100644 --- a/README.md +++ b/README.md @@ -71,3 +71,27 @@ Voir code Voir code + +### Question 3.1 + +Pour éviter les interblocages, il est nécessaire de contrôler la direction des trains en circulation et leur nombre dans chaque section. Nous ajoutons deux nouvelles variables : `trainsWaitingRL` et `trainsWaitingLR`, qui comptent les trains en attente par direction. Ces variables permettront de donner la priorité aux trains qui attendent depuis plus longtemps et ainsi d’éviter les situations de famine où un train pourrait être bloqué indéfiniment. + +### Question 3.2 + +L’invariant de sûreté doit garantir qu’un train ne quitte pas une gare si des trains du sens inverse sont déjà en mouvement. Pour cela, un train ne pourra avancer que si aucun train ne se déplace dans le sens opposé. La nouvelle condition qui doit être respectée peut être formulée ainsi : + +(currentDirection == d) || (movingTrains == 0) + + +### Question 3.3 + + +La gestion des interblocages repose principalement sur la classe Railway, qui contrôle la direction des trains, le nombre de trains en déplacement et les trains en attente. C’est dans cette classe que les décisions de départ des trains doivent être prises en fonction de l’état du système. Railway sera donc responsable de la mise en œuvre de la synchronisation et du respect de l’invariant de sûreté. + +### Question 3.4 + +Voir code + +### Question 3.5 + +Voir code diff --git a/src/train/Railway.java b/src/train/Railway.java index 3f9d668..6ae52ca 100644 --- a/src/train/Railway.java +++ b/src/train/Railway.java @@ -63,7 +63,7 @@ public class Railway { else trainsWaitingRL++; // Attente si un train circule déjà en sens inverse - while (movingTrains > 0 && currentDirection != d && (trainsWaitingRL <= trainsWaitingLR)) { + while (movingTrains > 0 && currentDirection != d ) { wait(); } -- GitLab