:: Enseignements :: ESIPE :: E4INFO :: 2013-2014 :: Java Réseau I - Concurrence et E/S ::
![[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) puissent ê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 de type
java.util.concurrent.locks.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 à jour 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 lecteur 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. Expliquer en quoi l'implémentation suivante n'est
pas correcte et proposer une correction.
- 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.
- Peut-on imaginer une version sans écrivain ? Si oui, proposer une telle solution (pour éviter
tout déconvenue, veillez à bien lire la documentation de ReadWriteLock).
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