:: Enseignements :: Master :: M1 :: 2013-2014 :: 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'comprends 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