TP threads
Module BI
Bertrand Dupouy
SOMMAIRE
Documentation : threads(80 Koctets)
ATTENTION :
- Utilsation des threads POSIX :
faire l'édition de liens avec -lpthread
et inclure le fichier pthread.h
- Utilisation des threads Solaris : édition de liens avec -lthread et inclure
les fichiers thread.h et sched.h
éventuellement utiliser :
#define _REENTRANT
avant le premier include, si problèmes.
On veut écrire un programme dans lequel main
attend la fin de tous les threads qu'il a créé avec la contrainte
suivante :
-
il est averti de la fin d'un thread DES que celui-ci se termine.
join ne convient pas puisqu'elle impose un ordre sur
la fin des threads dont on attend la terminaison.
On utilisera donc une variable conditionnelle
sur laquelle se bloque main une fois qu'il a créé et lancé
tous les threads.
Cette variable conditionnelle sera signalée par
les threads fils lors de leur terminaison.
On vous donne un canevas de ce programme dans le fichier
join.c .
On vous demande de le compléter (cf. lignes comportant des ...) et de le tester.
Utiliser la commande truss pour tracer l'exécution.
L'application à écrire doit fonctionner de la
façon
suivante :
- les threads du type "Tavailleur", au nombre de m,
attendent qu'il y ait des travaux
à effectuer, ces travaux sont au nombre de n.
n et m sont des paramètres donnés sur la ligne de
commande.
- un thread du type "Chef"
initialise le nombre de travaux à faire et débloque
tous les Travailleurs,
- tant qu'il y a des travaux à effectuer, les threads
"Travailleur" les
prennent en charge. Il y a n travaux pour m threads, et n peut
être supérieur à m,
- lorsque tous les travaux sont pris en charge, les threads Travailleurs
attendent de nouveaux travaux.
On utilise deux outils de synchronisation :
- Une barrière sur
laquelle attendent les travailleurs quand ils n'ont rien à faire
et qui est levée par le chef,
-
Un objet qui contient le nombre de travaux à faire sur lequel se bloque
le chef en attendant que tous les travaux soient pris en charge.
Le canevas détaillé du programme réalisant cette application
se trouve ici .
On vous demande de compléter ce programme, c'est à dire
d'écrire les méthodes de synchronisation.
Une documentation sur ces méthodes de synchronisation,
se trouve
ici.
©(Copyright)
dupouy@inf.enst.fr