Université Pierre et Marie Curie Master 2016 2017
PR : Travaux sur Machine 5. Processus légers et signaux

Cette séance étudie l’utilisation des Threads avec des signaux. On trouvera en annexe le Makefile, construit comme celui de la séance précédente.



1 Chaîne de threads et signaux

On désire créer une chaîne de N threads (la Thread principale crée une Thread, qui à son tour en crée une autre, et ainsi de suite N fois) qui fonctionne de la manière suivante. Au démarrage du programme, la Thread principale masque tous les signaux, démarre la chaîne de création puis attend que toutes les Threads soient créées avant d’afficher "Tous mes descendants sont créés".

Après leur création, toutes les Threads sauf la principale se bloquent en attendant que celle-ci les libère. Parallèlement, la Thread principale se bloque en attente d’un signal SIGINT émis par l’utilisateur avec un CTRL+C. A la délivrance de ce signal, elle se débloque et débloque les autres Threads de la chaîne puis attend enfin que toutes se soient terminées avant d’afficher "Tous mes descendants se sont terminés".

NB : Seule la Thread principale doit pouvoir être interrompue par un signal. On rappelle que chaque Thread gère un masque de signaux qui lui est propre.

Exemple d'appel :
bin/signal_thread 4
Fichier à créer : src/signal_thread.c

2 Arborescence de Threads

On considère la fonction C suivante fournie en annexe :

Chaque Thread créée par ce programme est associé à un niveau. Le niveau d’une Thread est égal à la valeur de sa variable lvl. Répondez alors aux questions suivantes :

Fichier à créer : thread_arborescent.txt

3 Synchronisation de threads arborecents

On souhaite écrire un variante de la fonction précédente, de sorte que toutes les Threads d’un niveau L soient créées avant de commencer à créer celles du niveau L+1. Pour cela, écrire une fonction main qui

Exemple d'appel :
bin/thread_arborescent_sync 4
Fichier à créer : src/thread_arborescent_sync.c

4 Annexes


thread_arborescent.c.txt

makefile
Format de l'envoi : src/signal_thread.c
Répertoires autorisés : thread_arborescent.txt src/thread_arborescent_sync.c