Programme principal {créer-semaphore(place,1); créer-processus(A, garer) ; créer-processus(B, garer); attendre-fin-processus; détruire-sémaphore(place); } |
Programme garer {P(place); se-garer; ... sortir-place(); V(place); partir(); } |
Exemple d'exécution: A exécute P(place): la valeur de place passe à 0 le P est passant. A se gare. interruption et changement de contexte B exécute P(place): la valeur de place passe à -1, B est donc bloqué et mis en file d'attente de place. A sort de la place A exécute V(place): place passe à 0 et B est sorti de la file d'attente, il devient prêt. interruption et changement de contexte B se gare ... |