Problème à l'utilisation des fonctions sigsetjmp et siglongjmp.
Bonsoir,
J'ai de nouveau un probleme...
Je doit coder un ensemble de fonctions de gestion des thread (pthread.h en bien plus simple).
Ma fonction t_yield() doit mettre en pause le thread qui l’exécute.
Pour ce faire j'utilise, dans t_yield() la fonction sigsetjump qui sauvegarde l'environnement d'execution. Puis une autre fonction qui recharge l'environnment par la fonction siglongjmp().
Le probleme c'est qu'a la recharche de l'environnement, la fonction t_yield() reprend mais ne revient jamais à la fonction du thread en question => erreur de segmentation
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| int t_yield()
{
int test;
if ( (test=sigsetjmp( environnement, 0 )) == 0 )
siglongjmp( env_ordonnanceur, 1 );
printf("toto\n");
return 0;
}
void fonction1()
{
printf("tata\n");
t_yield();
printf("hahahaha\n");
} |
Dans le terminal, je vois :
tata
toto
segmentation fault
Quelqu'un aurait une explication ?
Merci.