Licence d’informatique
Module de Programmation des systèmes

TD/TP de PDS - synchronisation d’activités concurrentes

Philippe Marquet

Ce document est disponible sous forme d’un fichier PDF.

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.

Ce document a été traduit de LATEX par HEVEA