TD du 16/11/2023
Pas de cours, car semaine de partiel
Problème du train
Un train qui va de droite à gauche et ensuite, il va de gauche à droite.
Il y a qu’un seul tunnel et qu’une seule ligne.
Cas d’un seul train
Un train va juste de gauche à droite et ne reviens pas
Il nous faut donc un sémaphore booléen pour protéger l’accès au tunnel
t (sémaphore) := 0
Processus train
begin
P(t)
passe
end
Cas d’un groupe de train
2 groupes de train arrivent, le tunnel est très long, ainsi si 2 trains vont dans le même sens alors, ils peuvent tous y aller, pas besoin qu’il n’y est personne dans le tunnel
tunnel (sémaphore binaire) := 1
nb_g (nombre train à gauche - int) := 0
nb_d (nombre train à droite - int) := 0
S_g (sémaphore binaire) := 1
S_d (sémaphore binaire) := 1
Processus Train_G
begin
# Section critique 1
Wait(S_g)
nb_g := nb_g + 1
if nbg_g = 1
Wait(tunnel)
endif
Signal(S_g)
# Fin section
Traverser
# Section critique 2
Wait(S_g)
nb_g := nb_g - 1
if nbg_g = 0
Signal(tunnel)
endif
Signal(S_g)
# Fin section
end
Processus Train_D
begin
# Section critique 1
Wait(S_d)
nb_d := nb_d + 1
if nbg_d = 1
Wait(tunnel)
endif
Signal(S_d)
# Fin section
Traverser
# Section critique 2
Wait(S_d)
nb_d := nb_d - 1
if nbg_d = 0
Signal(tunnel)
endif
Signal(S_d)
# Fin section
end