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.