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