[t]40ex
UniversitéPierre & Marie Curie
U.F.R d'infomatique
[t]45ex
Maîtrise -- 2000-01
Programmation Objet et Distribution
Tavaux dirigés n° 8
Exercice I Threads indépendants.
Question (I.1) Déclarer deux classes Ping
et Pong
étendant la classe
Thread
dont la méthode run est une boucle sans fin qui affiche,
respectivement,"ping"
et
"PONG"
puis attend un peu avant de recommencer.
Question (I.2) Déclarer une classe Go
comprenant la méthode main qui lance une
instance de Ping
et une instance de Pong
.
Exercice II Threads synchronisés.
Question (II.1) Déclarer une classe Sem
pour implanter un sémaphore simple. La
classe Sem
contient un champ booléen curVal
et deux
méthodes (get
et set
). La première méthode prend en
argument une valeur booléenne val
et attend que le champs
curVal
soit égal àval
. Lorsque c'est le cas, elle
renvoie la valeur true
. La seconde méthode prend en argument
une valeur booléenne pour modifier celle de curVal
et signale
la modification. Ces deux méthodes doivent définir des sections
critiques.
Question (II.2) Définir ànouveau les classes Ping
et Pong
de
façon àce qu'elles se synchronisent en utilisant un sémaphore
de la classe Sem
ci-dessus.
Question (II.3) Redéfinir la classe Go
.
Exercice III Producteur-consommateur.
Question (III.1) Définir une classe Stock
contenant quatre champs :
ip
: indice (ou numéro) du dernier produit stocké ;
ic
: indice (ou numéro) du dernier produit consommé ;
iMax
: nombre maximal de produit pouvant être stockés ;
open
: valeur booléenne valant true
par défaut
et que le producteur pourra mettre àfalse
.
La classe Stock
offre quatre méthodes :
isOpen
: indique si le stock est ouvert ou s'il reste
des produits à consommer ;
close
: permet de faire passer le champs open
àfalse
;
add
: permet l'ajout dun produit (i.e. incrémenter
ip
) et attend s'il n'y a plus de place disponible ;
peek
: permet de retirer un produit (i.e. incrémenter
ic
) et attend s'il n'y a pas de produit disponible. Cette
méthode peut déclencher une exception (StockClosed
).
Question (III.2) Définir une classe Prod
(pour le producteur) qui étend la
classe Thread
. Le producteur produira un nombre fini de
produits. Sa méthode run
boucle sur la séquence :
- ajouter un produit au stock;
- afficher;
- attendre.
Et ce, jusqu'àce que le nombre d'éléments à produire soit atteint.
Il ferme alors le stock.
Question (III.3) Définir une classe Cons
(pour le consommateur) dont la méthode
run
boucle infiniment sur la séquence :
- prendre un produit dans le stock;
- afficher;
- attendre.
La sortie de boucle est provoquée par l'exception StockClosed.
Question (III.4) Écrire une classe Go
pour tester.
Exercice IV Priorités.
On veut simuler une gestion un peu équitable de processus.
Question (IV.1) Écrire un classe Shared
contenant un tableau d'entiers
et offrant deux méthodes : synchronized int[] getBounds()
qui
founit (dans un tableau de deux entiers) l'indice des éléments
maximal et minimal : synchronized int access(int i)
qui
incrémente et retourne la ième case du tableau. Chacune des cases
du tableau servira de compteur pour autant de processus.
Question (IV.2) Écrire une classe Proc
qui encapsule une instance de
Shared
(disons ns
) et un entier (disons i
). Elle
étendra Thread
et sa méthode run
est une boucle sans
fin qui se contente d'accéder (selon la méthode access
) au
i
-ième élément du tableau que contient ns
.
Question (IV.3) Écrire une classe Monit
, qui étend Thread
et
dont la méthode run
crée une instance de Shared
et
autant de processus, puis assure l'équitéentre ces processus
selon le principe suivant : régulièrement, le processus dont le
compteur est minimal reçoit une prioritémaximal (moins 1), les
autres, une prioritéminimale. On affichera aussi régulièrement
la valeur de la différence entre maximal et minimal. On assure ainsi
que la différence entre les compteurs ne varie pas trop.
Question (IV.4) Écrire une classe Go
contenant une méthode
main
qui lance le moniteur avec une prioritémaximale.
Question (IV.5) (Àréaliser sur machine) Implantez les classes ci-dessus et
faite tourner. Écrivez une version laxiste du moniteur qui ne
modifie pas les priorités (égales pour tous par défaut). Faites
tourner. Qu'en conclure ?
This document was translated from LATEX by HEVEA.