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