[Segfault] multi-thread et pthread_join()
Bonjour,
Encore et toujours j'ai besoin de votre aide ! :)
Je dois réaliser un petit programme représentant le dîner des philosophes (http://fr.wikipedia.org/wiki/D%C3%AEner_des_philosophes) mais impossible de passer outre un segfault venant de la fonction pthread_join(). J'ai pas mal cherché sur le net (mais l'anglais et moi c'est pas encore ça) sans réellement comprendre ce qui pouvait produire ce segfault. Peut-être une histoire de thread pas encore créés (mais après certains test je ne pense pas) ou encore de la valeur du deuxième argument de pthread_join() qui doit être déclaré pour ne pas lui passer NULL mais malgrès cela rien à faire...
Ma structure (liste doublement chainée circulaire 8-)) :
Code:
1 2 3 4 5 6 7 8 9 10 11
| typedef struct s_philo
{
int rank;
int nb_eat;
t_etat etat;
pthread_t th_philo;
struct s_philo *next;
struct s_philo *prev;
int baguette[2];
int lock;
} t_philo; |
Segment Fault spotted line 9 !
Petite précision : Je segfault lorsque je tente de join le dernier thread.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| int run(t_philo **list)
{
t_philo *nav;
void *end;
nav = *list;
while (nav)
{
if (pthread_join(nav->th_philo, &end) != 0)
printf("Can't join !\n");
nav = nav->next;
}
return (1);
}
int main()
{
t_philo *list;
t_philo *nav;
t_philo *philo;
int i;
i = 0;
list = NULL;
while (i < 8)
{
philo = init_philo(i);
add_in_list(&list, &philo);
i++;
}
// D'après mes tests ma liste est correctement remplie, mis à part
// pthread_t th_philo, eux c'est start_threads qui s'en charge
start_threads(&list);
run(&list);
return (0);
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| int start_threads(t_philo **list)
{
t_philo *nav;
nav = *list;
while (nav->next != *list)
{
if (pthread_create(&(nav->th_philo), NULL, &engine, &nav) != 0)
printf("Cannot create thread n°%i!\n", nav->rank);
nav = nav->next;
}
return (1);
} |
Merci d'avance pour votre aide.