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