Les sémaphores


Solution (Dikjstra, 1965): Les sémaphores + deux primitives P (Puis-je passer?) et V (je sors!) ininterruptibles  pour encadrer la section critique.


Sémaphore:  Une structure représentée par son nom , sa valeur (positive, nulle ou négative) et une liste d'attente de processus bloqués sur ce sémaphore.

P(nom-semaphore)
V(nom-semaphore)
masquer les interruptions
valeur = valeur -1
if (valeur < 0)   bloquer le processus
                        mettre le processus en file d'attente
                        activer un processus prêt
finsi
demasquer les interruptions
masquer les interruptions
valeur = valeur + 1
si (valeur <= 0)  sortir un processus bloqué de la file
                          le mettre à l'état "prêt"
finsi
demasquer les interruptions                           

Donc seul P peut être bloquant, V est toujours passant

Autres fonctions nécessaires:
        créer-sémaphore (nom, valeur-initiale);
        détruire-sémaphore (nom)


suivant       plan