Voici donc mon scénario. Tout d'abord, j'ai une structure -pthreads - le thread créé précédemment utilise une nouvelle valeur (mise à jour après la création du thread)
struct interval
{
double lower;
double higher;
}
Maintenant, ma fonction de fil -
void* thread_function(void* i)
{
interval* in = (interval*)i;
double a = in->lower;
cout << a;
pthread_exit(NULL)
}
En principal, disons que je crée ces 2 fils -
pthread_t one,two;
interval i;
i.lower = 0; i.higher = 5;
pthread_create(&one,NULL,thread_function,&i);
i.lower=10; i.higher = 20;
pthread_create(&two,NULL,thread_function, &i);
pthread_join(one,NULL);
pthread_join(two,NULL);
Voilà le problème. Idéalement, le fil "un" devrait imprimer 0 et le fil "deux" devrait imprimer 10. Cependant, cela n'arrive pas. De temps en temps, je finis par avoir deux 10.
Est-ce intentionnel? En d'autres termes, au moment où le thread est créé, la valeur dans i.lower a déjà été modifiée dans main, donc les deux threads finissent par utiliser la même valeur?