Ce document est le support de travaux dirigés relatifs à la
synchronisation d’activités concurrentes. Il s’agit de réfléchir à ces
problèmes en l’absence de soucis d’implantation. Ces derniers seront
abordés ultérieurement lors de l’étude des mécanismes fournis par
POSIX, par exemple pour la synchronisation des processus légers.
Exercice 1 (Rendez-vous)
Soient les deux activités p1 et p2 suivantes.
Elles se partagent deux sémaphores, sem1 et sem2
initialisés à 0.
semaphore_t sem1, sem2;
init_semaphore(sem1, 0);
init_semaphore(sem2, 0);
p1() {
a1();
semaphore_up(sem2);
semaphore_down(sem1);
b1();
}
p2() {
a2();
semaphore_up(sem1);
semaphore_down(sem2);
b2();
}
Question 1
Quelle synchronisation a-t-on imposée sur les exécutions des
fonctions a1(), a2(), b1(), et
b2() ?
Question 2
Donnez le code qui impose la même synchronisation pour N
processus en utilisant N sémaphores.
Question 3
On peut résoudre le problème pour N activités avec
uniquement deux sémaphores (et un compteur). Donner le code
des activités dans ce cas.
Exercice 2 (Lecteurs et rédacteurs)
Il s’agit de proposer des solutions sous la forme de moniteur de
Hoare pour différentes variantes du problème des
lecteurs/rédacteurs. Se référer au cours pour l’énoncé général du
problème et une solution avec priorité aux lecteurs.Question 1 (Priorité aux rédacteurs)
Proposez une modification de la solution donnant priorités aux
rédacteurs afin qu’un rédacteur arrivant attende le moins
longtemps possible.
Question 2 (Priorité aux premiers arrivés)
Proposez une nouvelle solution alternative assurant que les
lecteurs comme les rédacteurs gagneront l’accès au fichier
dans l’ordre dans lequel leur demande sont réalisées. On
supposera pour cela que les conditions fournissent un service
d’attente fifo, premier arrivé, premier
servi.