Vous êtes sur la page 1sur 1

Exercice : Deux processus (P1 et P2) souhaitent établir un rendez-vous avant l’exécution de la

fonction RDV1() pour l’un et RDV2() pour l’autre. En utilisant les sémaphores, écrire la séquence
de pseudo-code de P1 et P2 permettant d’établir ce rendez-vous. Décrire le comportement des deux
processus à partir d’un diagramme temporel.

Réponse :
Si P1 arrive en premier, il doit bloquer pour attendre P2. Sinon, il réveille P2 qui est sûrement en
attente. P2 a ce même comportement.

Définir un variable entière i initialisée à 0 qui indique si mon vis-à-vis est déjà arrivé ou pas. Le
premier qui arrive positionne la variable i à 1.
Définir un sémaphore initialisé à 1 pour contrôler l’accès a cette variable
Définir un autre sémaphore initialisé à 0 pour bloquer si jamais je suis le premier à arriver

var i =0;
semaphore s1 = 1 ;// Contrôle l’accès à la variable i
semaphore s2 = 0 ;// Permet de bloquer si mon vis-à-vis n’est pas encore au lieu du rendez-vous

Pour le processus P1
P1()
BEGIN
DOWN(s1) ;
if (i==0){
i=1;
UP(s1) ;
DOWN(s2) ;
} else {
UP(s1) ;
UP(s2) ;
}
//Exécuter ma fonction d’après le rendez-vous
RDV1()
END;

Pour le processus P2
P2()
BEGIN
DOWN(s1) ;
if (i==0){
i=1;
UP(s1) ;
DOWN(s2) ;
} else {
UP(s1) ;
UP(s2) ;
}
//Exécuter ma fonction d’après le rendez-vous
RDV2()
END;

Vous aimerez peut-être aussi