TP 11 de Système 1ere Anne Informatique 2005-2006 : Threads (1)

Exercice 1

On simule un système de retraits banquaires. Plusieurs clients (compter un thread par client) essayent de retirer de l'argent dans un distributeur, à intervalles alléatoires. Un convoyeur dépose de l'argent à intervalles réguliers (15 secondes). Un client ne peut retirer d'argent si le distributeur est vide (on négligera la question annexe de savoir si le client a de l'argent sur son compte). Écrire un programme simulant ceci, en affichant le montant disponible dans le distributeur toutes les secondes.

Exercice 2

Réalisation d'une "barrière". Le but est de permettre à n threads de s'attendre mutuellement. Pour cela, on va créer un objet "Barriere", disposant d'une méthode attendre. Le principe est le suivant: la barriere sait à l'avance combien de threads vont l'utiliser. Elle contient deux champs : nombreThreadsAttendus et nombreThreadArrives. Quand un thread appelle la methode attendre, il augmente le nombre de threads arrivés, et attend que tous les threads attendus soient effectivement arrivés. Ainsi, les threads qui appellent "attendre" vont être bloqués jusqu'à ce que tous aient appelé "attendre". Ils reprendront ensuite leur travail. Application: en écrivant une Barriere, écrire un programme où deux threads partagent un tableau d'entiers. Le premier thread remplit les cases paires avec des '1', le second remplit les cases impaires avec des '2'. Les deux threads s'attendent, et le premier thread calcule et affiche la somme du contenu des cases du tableau, et le second affiche "terminé". Pour mieux vérifier, on pourra ajouter des sleep bien placés.
Serge ROSMORDUC