makecontext, swapcontext - Manipulation du contexte utilisateur.
Dans un environnement de type SysV, on dispose du type
ucontext_t défini dans
<ucontext.h>
et des quatre fonctions
getcontext(),
setcontext(),
makecontext()
et
swapcontext() qui permettent, au niveau utilisateur, des permutations de contextes entre plusieurs threads de contrôle au sein d'un processus.
Pour le type et les deux premières fonctions, voir
getcontext(2).
La fonction
makecontext() modifie le contexte pointé par
ucp ( qui a été obtenu par un appel à
getcontext()).
Avant d'appeler
makecontext(), il faut allouer une nouvelle pile
pour ce contexte, l'affectant à
ucp->uc_stack, et définir un
contexte successeur, l'affectant à
ucp->uc_link.
Lorsque ce contexte est activé par la suite (en utilisant
setcontext() ou
swapcontext()), alors, la fonction
func est tout d'abord appelée
avec les arguments spécifiés à la suite de
argc (où
argc
doit préciser le nombre de ces arguments), et lorsque cette fonction
s'achève, le contexte successeur est activé. Quand le pointeur sur le
contexte successeur vaut NULL, le thread se termine.
La fonction
swapcontext() sauvegarde le contexte actuel dans
la structure pointée par
oucp et active ensuite le contexte
pointé par
ucp.
L'interprétation de
ucp->uc_stack est exactement la même que pour
sigaltstack(2),
à savoir, cette structure contient l'adresse de départ et la longueur
d'une zone mémoire destinée à être utilisée comme pile, et ce, sans considération
sur le sens d'expansion de la pile. Il n'est donc pas nécessaire pour le
programme utilisateur de se soucier de ce sens.
SUSv2, POSIX 1003.1-2001.
Stéphan Rafin, 2002.