Exercices complémentaires Chapitre8

Question 1 : Coiffeur

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.

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 ?


Question 2 : Carrefour

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 :

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 :

 

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.