Vous êtes sur la page 1sur 3

Cours de Concurrence 2005-2006 Corrige Serie 6 (SSC) Laboratoire de Syst`emes Repartis 1

Corrige Serie 6 (SSC)


Exercice 1 : Ada. Producteur-Consommateur modie. Objets
proteges
protected type pile is
entry deposer(m: in message);
entry prelever(m: out message);
private
n : Constant := 100;
pile: Array (1..n) of message;
pointeur: integer := 0;
end pile;
protected body pile is
entry deposer(m: in message) when pointeur < n is
begin
pointeur := pointeur + 1;
pile(pointeur) := m;
end deposer;
entry prelever(m: out message) when pointeur > 0 is
begin
m := pile(pointeur);
pointeur := pointeur - 1;
end prelever;
end pile;
Une premi`ere dierence semantique tient au fait que la solution avec rendez-vous est une
solution active, i.e., impliquant une tache supplementaire (task lecteurs redacteurs), tandis
que la solution avec objets proteges est une solution passive, donc plus leg`ere.
Dautre part, levaluation des gardes ne se fait, dans le cas des rendez-vous, qu`a chaque
nouvelle execution de linstruction select, tandis quavec les objets proteges, une garde est
re-evaluee chaque fois quune variable intervenant dans son expression est susceptible davoir
change.
Cours de Concurrence 2005-2006 Corrige Serie 6 (SSC) Laboratoire de Syst`emes Repartis 2
Exercice 2 : Ada. Implementation des semaphores. Objets
proteges
protected semaphore is
entry init(val : integer);
entry P;
entry V;
private
ready : boolean := false;
n : integer;
end semaphore;
protected body semaphore is
entry init(val : integer) when not ready is
begin
n := val;
ready := true;
end init;
entry P when ready and n > 0 is
begin
n := n - 1;
end P;
entry V when ready is
begin
n := n + 1;
end V;
end semaphore;
Exercice 3 : Threads Posix
1. (Voir le chier threads1.c) Le seul message qui est ache, cest Main thread exiting.
Les dix appels `a pthread create se sont executes avec succ`es, mais les dix threads crees
nont pas eu le temps de commencer leur execution avant que le thread principal ne se termine.
Avec les threads Posix, quand le thread principal se termine le processus se termine aussi,
et tous les threads qui ne se sont pas encore termines sont detruits.
2. (Voir le chier threads2.c) Maintenant, le thread principal execute pthread join sur les
dix threads crees. De cette mani`ere, le thread principal se bloquera jusqu`a ce que les dix
threads nissent leur procedure. Cela permet `a tous les threads de nir leur execution.
La semanthique de terminaison Posix est bien dierente `a celle de Java:
En Posix, comme on a vu au point 1, le processus se termine quand le thread principal se
termine (independamment de letat dautres threads).
En Java, il y a deux types de threads: les threads normaux et les threads daemon. Le
processus se termine quand tous les threads normaux se sont termines.
Cours de Concurrence 2005-2006 Corrige Serie 6 (SSC) Laboratoire de Syst`emes Repartis 3
Exercice 4 : Threads POSIX: Mutex et Variables de condition
Le code prodcons.c est disponible depuis la page web du cours.

Vous aimerez peut-être aussi