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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.