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 |