Université Louis Pasteur
LICENCE 3ème année


 

Travaux Pratiques
de

Programmation Distribuée

(sujet n°2)

Threads java, Moniteurs



Télécharger ces exemples.


Exercice 1


Rendez-vous dans le répertoire 'ExemplesDuCours'.
  1. Lancer le programme ExempleConcurrent plusieurs de fois de suite. Constater que le résultat n'est pas toujours identique. Comprendre pourquoi.
  2. Lancer le programme EvtGenerator plusieurs de fois de suite. Comprendre les appels à wait() et notifyall() realise's dans le code.


Exercice 2

Rendez-vous dans le répertoire 'ProdCons'.

    Il y a dans ce systeme deux types de threads :     Tous les threads communiquent par l'intermediaire d'un entrepot global, de taille fixee, initialement vide. Le probleme consiste à synchroniser tous les threads en jeu, de facon à ce que les contraintes suivantes soient vérifiées :
   Completez le squelette de programme 'ProdCons.java' pour qu'il ait les fonctionnalités décrites ci-dessus.

Rappels :


Exercice 3

Rendez-vous dans le répertoire 'LecteurEcrivain'.

    On se place ici dans le cadre d'un système disposant d'une donnée partagée et comportant deux types de threads :    Le problème de synchronisation est ici défini par les contraintes suivantes :
   Tel qu'il est défini, ce système peut se trouver dans une situation dite "de famine". En effet, imaginons qu'il y ait beaucoup de threads lecteurs, à un point tel qu'il y ait à tout moment au moins un thread lecteur utilisant la donnée partagée. Dans ce cas, un éventuel thread écrivain n'aura jamais accès à la donnée : il sera en situation de famine.

    (Notez que dans certains cas particuliers la situation est symétrique. Si il y a "beaucoup" d'écrivains, les lecteurs risquent de rester à l'état de famine. Toutefois, si l'attribution des accès est équitable, cela ne devrait pas arriver.)

   Nous allons ici choisir de régler ce problème en énoncant une règle de priorité :
    Pour comprendre l'influence de cette règle, examinons un exemple impliquant 3 threads, deux lecteurs L1 et L2 et un écrivain E1, dans la séquence suivante :
   Dans ce cas, la règle de priorité modifie le comportement global. En effet :
   (Tout ceci suppose qu'il n'y a pas d'autre demande d'accès entre temps.)

   Completez le squelette de programme 'LecteurEcrivain.java' pour qu'il ait les fonctionnalités décrites ci-dessus.



Exercice 4

    Rendez-vous dans le répertoire 'Tri'.
   
    Paralleliser l'algorithme de Tri du fichier 'Tri.java' en utilisant les threads. Avec des mesures de temps sur une grande liste d'entiers, vous montrerez que votre solution est efficace sur une machine multiprocesseur. Pour cela vous utiliserez 'turing' (quadri pro) comme machine finale de test.



[Page réalisée à partir d'un document de Guillaume Latu]