Vous êtes sur la page 1sur 6

TD concurrence

TD concurrence
(bus-coiffeur)

Table des matières 
1
 L’embarquement dans un autobus ............................................................................... 2

1.1
 Première
solution................................................................................................................................................2

1.1.1
 Scenario pour un usager .............................................................................................................................. 2

1.1.2
 Scenario pour le  bus...................................................................................................................................... 3

1.2
 Deuxième
solution ..............................................................................................................................................3

1.2.1
 Scenario pour un usager .............................................................................................................................. 3

1.2.2
 Scenario pour le bus....................................................................................................................................... 3

1.2.3
 Rendez­vous....................................................................................................................................................... 4

2
 Le coiffeur .................................................................................................................... 5

2.1.1
 Scenario pour le  coiffeur............................................................................................................................. 5

2.1.2
 Scenario pour un  client................................................................................................................................ 5

2.1.3
 Modélisation avec sémaphores ................................................................................................................. 5


1 TD Concurrence
TD concurrence

1 L’embarquement dans un autobus

La zone d’embarquement d’un arrêt de bus offre MAX places.


Un usager qui arrive après le bus doit attendre le bus suivant.
Comment se fait l’embarquement :
- à l’arrivée du bus, les usagers déjà présents essaient de monter à bord. (Ceux qui se
présentent après l’arrivée du bus doivent attendre le suivant).
- Lorsque tous les usagers qui attendaient sont montés à bord, le bus démarre,
- Si aucun candidat à l’embarquement n’est présent à l’arrivée du bus, celui-ci repart à
vide.

1.1 Première solution


Dans cette solution, chaque fois qu’un usager est monté à bord, il en fait monter un autre.
Scénario pour un usager :
- incrémenter le compteur sur le nombre d’usagers,
- attendre que le bus arrive,
- faire embarquer le suivant, sauf s’il est le dernier,
- s’il est le dernier, indiquer au bus qu’il peut démarrer,
Scénario pour le bus :
- si des usagers attendent, faire monter le premier,
- puis attendre que le dernier soit embarqué, et partir

1.1.1 Scenario pour un usager

Initialisation des sémaphores :


Init(SFA, Nb_Places)
Init(SDernier, 0)
Init(XU, 1)
Init(SEmbarquer, 0)

Scénario pour un usager


P(SFA)
P(XU) /* exclusion mutuelle sur Nb_Usagers */
Nb_Usagers = Nb_Usagers +1 ;
V(XU)
V(SFA)

P(SEmbarquer) /* attendre que le bus arrive */

Embarquer

Nb_Usagers = Nb_Usagers -1 ;
if (Nb_Usagers == 0) V(SDernier) /* le dernier embarqué fait démarrer
le bus */
else V(SEmbarquer) /* chaque usager en fait monter
un autre */

2 TD Concurrence
TD concurrence

1.1.2 Scenario pour le bus

Scénario pour le bus

P(XU) /* Empecher l arrivee d’un nouvel usager */


Si ( Nb_Usagers > 0)
V(SEmbarquer) /* si des usagers sont presents, en faire monter un
Celui-ci en fera monter un autre, etc * /
P(SDernier) /* attendre que le dernier ait embarqué */
V(XU) /* autorise l arrivee d’autres usagers */

Partir

1.2 Deuxième solution

Nous allons ici résoudre le problème de la façon suivante :


- c’est le processus bus qui fait monter tous les passagers, l’un après l’autre, jusqu’au
dernier de ceux qui sont dans la file d’attente.
- Chaque usager incrémente un compteur qui en donne le nombre, puis attend que le bus
arrive, monte à bord et indique au bus qu’il a bien embarqué.

Initialisation des variables utilisées :


- Les sémaphores :
Init(XU, 1) /* exclusion mutuelle sur le compteur d’usagers */
Init(SEmbarquer, 0) /* attendre l embarquement */
Init(SA_bord, 0) /* pour indiquer qu’on est à bord */

- Le compteur qui indique le nombre d’usagers an attente :


Nb_Usagers = 0 ;

1.2.1 Scenario pour un usager

Scénario pour un usager

P(XU) /* exclusion mutuelle sur Nb_Usagers */


Nb_Usagers = Nb_Usagers +1 ;
V(XU)

/* deux verrous pour le rdv * /


P(SEmbarquer) /* attendre pour embarquer */
Embarquer
V(SA_bord) /* indiquer qu’on est à bord */

1.2.2 Scenario pour le bus

3 TD Concurrence
TD concurrence

Scénario pour le bus

P(XU) /* il empeche l’arrivee d’un nouvel usager */


N = min (Nb_Usagers, MAX) ;

for (i=1 ; i < N; i++)


V(SEmbarquer) /* faire embarquer un passager */
P(SA_bord) /* attendre la fin de l’embarquement */

Nb_Usagers = max (Nb_Usager-MAX, 0) ;


V(XU) /* autorise l arrivee d’autres usagers */

Départ

1.2.3 Rendez-vous

Remarque :
Un schéma dans lequel on assure que deux processus tels que :

Processus A Processus B
... ...
I1; J1;
I2; J2;
... ...

Exécutent d’abord les instructions I1 et J1 avant d’exécuter les instructions I2 et J2 s’appelle


un rendez-vous, comme indiqué ci-après :

Processus A Processus B
... ...
I1; J1;
Pt de rdv Pt de rdv
I2; J2;
... ...

Pour assurer ce type de synchronisation, on peut faire :

Init (SA, 0);


Init (SB, 0);

Processus A Processus B
I1; J1;
P(SB); V(SB);
V(SA); P(SA);
I2; J2;

Ou encore :

Processus A Processus B
I1; J1;
V(SA); V(SB);
P(SB); P(SA);
I2; J2;

4 TD Concurrence
TD concurrence

Mais pas (interblocage possible) :

Processus A Processus B
I1; J1;
P(SB); P(SA);
V(SA); V(SB);
I2; J2;

2 Le coiffeur

Voici le scénario à modéliser : dans un 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.

Les événements possibles sont les suivants :


- 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, le coiffeur se réveille et se lève. Le
client s'assied alors dans le fauteuil F et se fait coiffer,
- Si un client arrive pendant que le coiffeur travaille :
o si un des N sièges est libre, il s'assied et attend,
o sinon il ressort.

2.1.1 Scenario pour le coiffeur

Le processus coiffeur :
- sert le premier client de la file, s'il y en a un (sinon il se bloque),
- décrémente Attend (accès exclusif) ,
- libère le siège du client (l'invite à s'asseoir)
- Coiffe

2.1.2 Scenario pour un client

Ce que fait un client :


- Si le nombre de clients en attente est supérieur à N, sort
- incrémente Attend (accès exclusif)
- s'ajoute à la file d'attente
- attend de pouvoir s'asseoir dans le siège du coiffeur
- se fait coiffer et sort.

2.1.3 Modélisation avec sémaphores

Les sémaphores utilisés :


- SP : gère la file des clients en attente. Indique le nombre de ressources pour le
coiffeur, c'est-à-dire les clients.
- SCF : gère l'accès au fauteuil du coiffeur. Indique si le coiffeur est prêt à travailler ou
non (il est la ressource unique des clients).
- SP et SCF gèrent un schéma producteur/consommateur
- SX : assure l'accès en exclusion mutuelle à la variable partagée Attend. Attend
permet de contrôler la taille maximale de la file d'attente

5 TD Concurrence
TD concurrence

Ces sémaphores sont initialisés ainsi :


Sémaphore Init(SP, 0) Init(SCF, 0); Init(SX, 1);
Rôle :
Gère les ressources Gère la ressource Gère l’exclusion
qu’attend le coiffeur unique (le fauteuil) mutuelle sur la
qu’attendent des clients ressource partagée par
tous : coiffeur et
clients

Le coiffeur Les clients


Coiffeur(){ Client(){
P(SX);
while(1){ if(Attend < N){
P(SP); Attend = Attend + 1;
P(SX); V(SP);
Attend = Attend - 1; V(SX);
V(SCF); P(SCF);
V(SX); SeFaireCoifferEtSortir();
Coiffer(); }
} else{
V(SX);
} Sortir();
}
}

6 TD Concurrence

Vous aimerez peut-être aussi