Universit´
e de Provence
MASTER INFORMATIQUE
Programmation Parall`
ele
et Distribu´
ee
2011-2012
PRAM et Thread Java
1 Exercice d’introduction
1. ´
Ecrire un programme qui va lancer 10 Threads, o `
u chaque thread va afficher son num´
ero
deux fois (deux println distincts) sur la sortie standard. La premi`
ere fois on affichera le
num´
ero du Thread puis ”D´
ebut” et la deuxi`
eme fois on affichera puis le num´
ero du Thread
puis ”Fin”. Qu’observez-vous ? Ex´
ecuter plusieurs fois votre programme ? Voyez-vous des
diff´
erences ?
2. Changer votre programme pour que chaque Thread attende un temps al´
eatoire entre les
deux affichages de ses num´
eros. Le temps d’attente (fonction sleep()) devra ˆ
etre compris
entre 0 et 1000 millisecondes. Voyez-vous des diff´
erences avec l’ex´
ecution sans l’attente ?
Aide
Pour cr´
eer un thread, il faut impl´
ementer une classe ThreadPlus qui h´
erite de Thread avec le
mot cl´
e extends. La nouvelle classe doit impl´
ementer une m´
ethode static void run() qui est le code
ex´
ecut´
e par le thread. Pour ex´
ecuter un thread, il suffit de cr´
eer un objet tde la classe ThreadPlus
et d’utiliser la m´
ethode start() avec t.start().
Pour g´
en´
erer un nombre entre 0 et 1000, il suffit d’utiliser la m´
ethode random() de la classe
Math qui renvoie un r´
eel pseudo-al´
eatoire entre 0 et 1, et de multiplier le r´
esultat par 1000. En-
suite, il suffit d’utiliser ce double navec sleep((int)n). Il est `
a noter que puisque sleep peut lancer
une erreur de type InterruptedException, il faudra la placer `
a l’int´
erieur d’un bloc try catch.
2 Variable partag´ee
Dans cet exercice, on s’int´
eresse aux variables partag´
ees et aux diff´
erentes fac¸ons de synchro-
niser les threads pour ´
eviter les comportements anormaux.
1. Ex´
ecuter plusieurs fois le code de VariablePartagee.java (disponible `
ahttp:
//pageperso.lif.univ-mrs.fr/˜arnaud.labourel/PPD/codeTP1/
VariablePartagee.java). Qu’observez vous ? Expliquer le rˆ
ole du mot-cl´
e vola-
tile.
2. Ex´
ecuter plusieurs fois le code de VariablePartageeSynchronized.java (disponible `
a
http://pageperso.lif.univ-mrs.fr/˜arnaud.labourel/PPD/codeTP1/
VariablePartageeSynchronized.java) Qu’observez vous ? Expliquer le rˆ
ole du
mot-cl´
e synchronized.
3. Ex´
ecuter le code de VariablePartageeBienSynchronized.java (disponible `
a
http://pageperso.lif.univ-mrs.fr/˜arnaud.labourel/PPD/codeTP1/
VariablePartageeBienSynchronized.java) Qu’observez vous ? Quelles sont les
diff´
erences ?
4. Proposer une solution compl`
ete de synchronisation.
1
3 Impl´ementation avec Runnable
On rappelle que, comme l’h´
eritage multiple n’est pas possible en Java, il y a ´
egalement une
autre m´
ethode pour cr´
eer des threads, par l’impl´
ementation de l’interface Runnable.
1. Ex´
ecuter le programme ExRunnable.java (disponible `
ahttp://pageperso.lif.
univ-mrs.fr/˜arnaud.labourel/PPD/codeTP1/ExRunnable.java).
2. Y-a-t’il des diff´
erences avec l’impl´
ementation pr´
ec´
edente ?
4 Calcul
Une approximation de e1nous est donn´
e par la formule suivante :
e1=
n
X
i=0
(1)i
i!
Ecrire un programme qui calcule un approximation de e1en additionnant ntermes. Ce pro-
gramme devra r´
epartir la charge de calcul sur kthreads.
5 Barri`ere simple
Une barri`
ere est un objet synchronisant nthreads. Elle dispose d’une fonction attendre qui va
ˆ
etre bloquante pour les n1premiers appels et qui va d´
ebloquer tout le monde `
anappels.
1. ´
Ecrire une classe Barri`
ere qui peut ˆ
etre utilis´
ee comme une barri`
ere de synchronisation
r´
eutilisable.
Constructeur Barriere(int nb):d´
efinit une barri`
ere pour nb threads,
– M´
ethode attendre(void) : bloque les threads l’appelant jusqu’`
a ce que nb threads aient
appel´
e cette m´
ethode.
Remarque : Il est pr´
ef´
erable d’utiliser Wait et notifyAll s’utilisant dans une zone synchoni-
zed
2. Ecrire un programme r´
ealisant une course ´
equitable entre threads, ie bloquant les threads
jusqu’`
a ce qu’ils soient tous prˆ
ets `
a courir. Dans l’exercice pr´
ec´
edent appeler la fonction
attendre() de la barri`
ere entre les deux messages. Qu’observez vous ?
6 Gestion de compte en banque
1. Rappeler les deux m´
ethodes de bases utilis´
ees dans JAVA pour cr´
eer un thread. Quelle est
la diff´
erence entre les m´
ethodes run et start ?
2. On consid`
ere maintenant le code de Compte.java et Banque.java (disponible `
ahttp://
pageperso.lif.univ-mrs.fr/˜arnaud.labourel/PPD/codeTP1/Compte.java
et http://pageperso.lif.univ-mrs.fr/˜arnaud.labourel/PPD/codeTP1/
Banque.java) Ce code permet-il de simuler correctement le fonctionnement d’un compte
bancaire ? Si non, proposez une solution.
7 Tri et R´eseaux de Tri
1. Impl´
ementer une machine PRAM lin´
eaire comme vu en TD.
2. Impl´
ementer l’algorithme de tri avec une machine PRAM.
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !