Skip to content
Snippets Groups Projects
Commit 87d2d388 authored by CELERIER Auguste's avatar CELERIER Auguste
Browse files

exo 3

parent 5e81d106
Branches
No related tags found
No related merge requests found
...@@ -71,3 +71,27 @@ Voir code ...@@ -71,3 +71,27 @@ Voir code
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
...@@ -63,7 +63,7 @@ public class Railway { ...@@ -63,7 +63,7 @@ public class Railway {
else trainsWaitingRL++; else trainsWaitingRL++;
// Attente si un train circule déjà en sens inverse // Attente si un train circule déjà en sens inverse
while (movingTrains > 0 && currentDirection != d && (trainsWaitingRL <= trainsWaitingLR)) { while (movingTrains > 0 && currentDirection != d ) {
wait(); wait();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment