Les baigneurs

Problème: Simuler une suite d'actions de baigneurs à la piscine. Un baigneur doit prendre un panier, trouver une cabine libre, se déshabiller, puis sortir de la cabine se baigner puis sortir du bain, prendre son panier, trouver une cabine, se rhabiller, déposer la panier vide.
  

Programme principal
 { créer-semaphore(cabine,2); il y a 2 cabines
   créer-sémaphore(panier,3); il y a 3 paniers
   créer-processus(B1,baigneur)          
   créer-processus(B2, baigneur) ;
   créer-processus(B3, baigneur);
...
   créer-processus(Bn, baigneur); n baigneurs
   attendre-fin-processus();

   détruire-sémaphore(cabine);
   détruire-sémaphore(panier);}

Programme baigneur
 {P(panier);
   prendre_un_panier;
   P(cabine);
   rentrer-dans-cabine;
   se-déshabiller;
   V(cabine);      

    se-baigner;
    P(cabine);
    se-rhabiller;
    V(cabine);
    V(panier);
    quitter-la-piscine;}

Exemple d'exécution (4 baigneurs):
B2, B3, B4
prennent un panier;  B3, B4 entrent dans une cabine; B2 se bloque dans l'attente d'une cabine; B3 sort de la cabine et se baigne; B2 entre dans la cabine; B2, B4 sortent de la cabine et se baignent; B1 se bloque sur l'attente d'un panier; B4 sort du bain et entre dans une cabine; B4 sort de la cabine, repose son panier et quitte la piscine; B2, B3 sortent du bain et entrent dans une cabine; B1 prend un panier et se bloque dans l'attente d'une cabine; B2 sort de la cabine, pose la panier et quitte la piscine; B1 entre dans la cabine; B1 sort de la cabine et se baigne; ... B1 sort du bain et entre dans une cabine; B1 sort de la cabine pose son panier et quitte la piscine; FIN

suivant     plan