Synchronisation en Java

publicité
distribué le 11 mars 2009
Université de Provence
M ASTER I NFORMATIQUE
Programmation Parallèle
et Distribuée
2008-2009
Synchronisation en Java
A
Synchronisation en Java
A.1
Quelle est la différence entre visibilité et atomicité ?
A.2
Qu’est-ce qu’une structure de données thread-safe ? Comment se fait-il qu’il existe
des structures de données non thread-safe ?
A.3
Quel est l’intérêt d’utiliser des files d’attente ? Donner les principales différences
entre LinkedList, LinkedBlockingQueue et ConcurrentLinkedQueue.
B
Problèmes Classiques
B.4
Ecrire le problème des Producteurs et Consommateurs en Java.
1. avec ArrayBlockingQueue
2. avec LinkedBlockingQueue
3. avec Semaphore (Indication : on pourra définir une classe SemBlockingQueue implémentant
l’interface BlockingQueue.)
B.5
Ecrire le problème du Coiffeur en Java.
C
Interrogation multi-serveurs
On dispose d’un certain nombre de serveur de calculs spécialisés dans la multiplication :
chaque serveur mul répond à chaque requête req par mul × req. On veut concevoir un serveur
central qui puisse orienter des requêtes "mul x nb" vers le bon serveur et renvoyer la réponse.
Dans un souci d’optimisation, on n’ouvrira pas une nouvelle socket à chaque connexion mais on
maintiendra une table des serveurs de multiplication connectés et pour chacun d’entre eux, on
maintiendra systématiquement trois sockets ouvertes.
Les clients peuvent poser plusieurs questions de suite et attendent les réponses dans le même
ordre :
$ telnet localhost 10000
5x12
=60
3x1024
7x23
2x150
=3072
le serveur (7) n’est pas disponible
2x700
=300
=1400
Proposer une architecture multithreadée à base de files d’attente pour ce serveur central.
Implémenter l’ensemble en Java. On supposera pour commencer que le serveur mul est sur le
port 10000 + mul. Ensuite on pourra supposer que l’on dispose d’un fichier de correspondance
mul ←→hote:port. On n’oubliera pas de gérer les cas des serveurs de multiplication non disponible.
E. Godard
1
Téléchargement