next up previous contents
Next: Les différents états d'un Up: Mise en oeuvre des Previous: Effets de l'appel fork()   Contents

Traitement des signaux dans les threads

Comme les threads ne sont pas connus par le noyau, la gestion des signaux est un peu particulière. En effet, la gestion des signaux est faite pour la totalité du processus (1 seul handler/masque de signaux). Ainsi, chaque LWP qui prend en compte un thread appartenant à un processus a un masque de signal correspondant à celui du processus de manière à pouvoir masquer tous les signaux que le processus peut masquer. Par contre, chaque thread possède un masque de signal spécifique qui est nécessairement un sous-ensemble de celui du LWP. En définitive, c'est le LWP et la thread library qui filtrent les signaux devant atteindre les threads.

Lorsque le noyau émet un signal vers le thread, il l'envoie en fait au LWP gérant ce thread. La threads library interprète alors la distribution du signal en fonction des masques spécifiques de thread. Si le signal est asynchrone, il est délivré au premier thread réceptif. A l'inverse, si le signal est synchrone, il est délivré au thread ayant créé le problème. Il existe des signaux spécifiques qui permettent de communiquer entre threads. C'est ce que l'on appelle les signaux directifs.


next up previous contents
Next: Les différents états d'un Up: Mise en oeuvre des Previous: Effets de l'appel fork()   Contents
Arnaud Revel
2001-11-26