:: Enseignements :: Master :: M1 :: 2012-2013 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
Thread, Section critique, Interblocage
|
Exercice 1 - Modification de plusieurs variables en concurrence
On souhaite créer deux threads qui changent les coordonnées
d'un même point:
-
Vérifier en utilisant grep que le code affiche
des points (0,1) ou (1,0).
Expliquer pourquoi.
-
Créer des sections critiques en utilisant un bloc synchronized
là où il faut pour que seuls des points (0,0) et (1,1) puisse être affichés.
-
Expliquer pourquoi il n'est pas conseillé de synchroniser sur this
et modifier votre code en conséquence.
-
Pourquoi les champs x et y n'ont-ils pas besoin d'être déclarés volatile ?
Exercice 2 - Des verrous pour les critiques
-
Expliquer dans quels cas il est préférable d'utiliser un lock ou un bloc synchronized.
-
Créer une classe LockedPoint ayant la même sémantique
de la classe Point de l'exercice précédent
mais en utilisant un verrou de la classe java.util.concurrent.locks.ReentrantLock
Exercice 3 - Verrous permissifs
On souhaite mettre en place un système de type cache; une donnée lue fréquemment est
mise-à-jours périodiquement. Prenons le cas d'une webcam. On considère que la webcam
capture une image toutes les 10 secondes et stocke une image webcam_<num>.jpg.
num correspond à la version de l'image.
- On souhaite mettre en place deux types de processus. Des lecteurs qui se contentent
de consulter l'image (on se contentera d'afficher l'identifiant du spectateur et le nom
de la version courante de l'image). Un écrivain qui teste périodiquement la péremption de
l'image est la met à jours si besoin est. Expliquer en quoi l'implémentation suivante n'est
pas correcte et corriger la.
- Il ne semble pas cohérent que deux lecteurs ne puissent pas accéder en lecture simultanément
aux données de la webcam. En quoi l'utilisation d'un ReadWriteLock peut-elle nous aider ?
Modifier votre code en conséquence.
-
Comment faire pour minimiser le temps passé dans la section critique
protégée par le write lock ?
Rappel, une thread ne peut pas demander le write lock si elle possède déjà
le read lock.
Exercice 4 - J'comprend pas, ça devrait marcher
Voici une version simplifiée d'un code fourni par un étudiant:
-
Exécuter le code ci-dessus et expliquer.
Où se situe l'interblocage ?
-
La machine virtuelle hotspot possède
un mécanisme de détection des interblocages.
Taper lors de l'exécution Ctrl+\ sous Linux (resp. Ctrl+Break sous Windows)
et vérifier avec ce que vous aviez pronostiqué.
Il est possible également d'utiliser l'outil de surveillance jconsole.
Exercice 5 - Java c'est trop dur, je veux faire de la broderie
Où se situe l'interblocage dans le code ci-dessous (indice : un verrou est caché) :
© Université de Marne-la-Vallée