2
3
(Dyjsktra 1965)
Structure de données et des méthodes
Entier
File d’attente de processus/threads
Opérations pour
Initialiser l’entier : nombre de jetons
Prendre un “jeton”, ou s’endormir si pas de disponible : P(sem)
Réveiller un processus qui attend le jeton, en le lui passant,
sinon, le deposer : V(sem)
Outil général, comme moniteur, pour
le problème de l’exclusion mutuelle : 1 jeton initial
Exclusion mutuelle sur N exemplaires équivalents d’une même
ressource : N jetons
N’importe quelle forme de synchronisation conditionnelle : en
jouant sur la valeur du jeton et sur les appels P ou V
4
: une variante possible
structure de données :
Val : entier
File : file de (contexte de)
processus ou threads
Op
Opé
ération V(
ration V(s:semaphore
s:semaphore)
)
Si (
Si (s.File non vide)
s.File non vide)
Alors
Alors <retirer de s.File le contexte d
<retirer de s.File le contexte d’
’un processus>
un processus>
<mettre ce processus dans l
<mettre ce processus dans l’é
’état prêt>
tat prêt>
Sinon
Sinon s.Val := s.Val + 1;
s.Val := s.Val + 1;
FinSi
FinSi
Op
Opé
ération P(
ration P(s:semaphore
s:semaphore)
)
Si (
Si (s.Val <=0)
s.Val <=0)
Alors
Alors <ranger le contexte du processus dans s.File>
<ranger le contexte du processus dans s.File>
<mettre le processus dans l
<mettre le processus dans l’é
’état bloqu
tat bloqué
é>
>
Sinon
Sinon s.Val := s.Val
s.Val := s.Val –
–1;
1;
FinSi
FinSi
Op
Opé
ération
ration Init
Init(
(s:semaphore
s:semaphore,
, int
int init
init)
)
s.Val
s.Val = init ;
= init ;
creer
creer s.File
s.File, vide
, vide