Une illustration classique du problème de la synchronisation est celui du salon de coiffure.
Dans le salon de coiffure, il y a un coiffeur C, un fauteuil F dans lequel se met le client pour être coiffé et N sièges pour attendre.
- S'il n'a pas de clients, le coiffeur C somnole dans le fauteuil F.
- Quand un client arrive et que le coiffeur C dort, il le réveille, C se lève. Le client s'assied dans F et se fait coiffer.
- Si un client arrive pendant que le coiffeur travaille :
- si un des N sièges est libre, il s'assied et attend,
- sinon il ressort.
Il s'agit de synchroniser les activités du coiffeur et de ses clients avec des sémaphores. Les sémaphores utilisés sont initialisés ainsi :
Init (SCF, 0);
Init (SP, 0);
Init (SX, 1);
Coiffeur ()
{
while (1)
{
P (SP);
P (SX);
Attend = Attend -1;
V (SCF);
V (SX);
Coiffer();
}
}
Client();
{
P (SX);
if (Attend < N)
{
Attend = Attend + 1;
V (SP);
V (SX);
P (SCF);
SeFaireCoifferEtSortir();
}
else
{
V (SX);
Sortir();
}
}
a- Détailler le fonctionnement du coiffeur et de ses clients tels qu'ils sont représentés par les deux fonctions Coiffeur et Client.b- Quel est le rôle de chacun des sémaphores SCF, SP et SX ?
Le carrefour ou le problème de la gestion des feux de circulation.
La circulation au carrefour de deux voies est réglée par des signaux lumineux (feu vert/rouge).
On suppose que les voitures traversent le carrefour en ligne droite et que le carrefour peut contenir au plus une voiture à la fois.
On impose les conditions suivantes :
- toute voiture se présentant au carrefour le franchit en un temps fini,
- les feux de chaque voie passent alternativement du vert au rouge, chaque couleur étant maintenue pendant un temps fini.
Les arrivées sur les deux voies sont réparties de façon quelconque. Le fonctionnement de ce système peut être modélisé par un ensemble de processus parallèles :
- un processus P qui exécute la procédure Changement de commande des feux;
- un processus est associé à chaque voiture;
- le traversée du carrefour par une voiture qui circule sur la voie i (i = 1, 2) correspond à l'exécution d'une procédure Traverseei par le processus associé à cette voiture.
On demande d'écrire le programme Changement ainsi que les procédures Traversee1 et Traversee2.
Remarque :
Le processus P doit attendre que la voiture engagée dans le carrefour en soit sortie avant d'ouvrir le passage sur l'autre voie.
Question 3: Exécution atomique
On suppose que sur Unix on peut définir des variables x et y communes à deux processus comme suit :
shared long x = 0 ;
shared long y = 0 ;
Deux processus exécutent les codes suivants :
Processus P1
Processus P2***
x = x + 1;
y = y + 1;
printf("x=%d,y=%d\n", x, y);
******
x = x * 2;
y = y * 2;
printf("x=%d,y=%d\n", x, y);
***
a- Ces processus s'exécutent sur un système UNIX dont la politique d'ordonnancement est du type round robin . Quelles peuvent être les couples de valeurs affichées par chacun des deux processus ?
b- En utilisant un sémaphore, modifier le code pour assurer que les printf affichent toujours des valeurs identiques pour x et y.