Université de Provence M ASTER I NFORMATIQUE Programmation Parallèle et Distribuée 2006-2007 distribué le 20 février 2007 Synchronisation en Java A Synchronisation : Problèmes Classiques A.1 Quel est l’intérêt d’utiliser des files d’attente ? Donner les principales diff érences entre LinkedList, LinkedBlockingQueue et ConcurrentLinkedQueue. A.2 Ecrire le problème des Producteurs et Consommateurs en Java. 1. avec LinkedBlockingQueue 2. avec ArrayBlockingQueue 3. avec Semaphore A.3 Ecrire le problème du Diner des Philosophes en Java. B 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. B. Derbel, E. Godard 1