Bonjour,
voilà je dois réaliser un programme fonctionnant avec l'aide des thread de la manière suivante :

- Un processus ( thread principal ) crée un thread
- Ce thread reçoit un nombre en paramètre qu'il affichera à l'écran, à la fin de son traitement, il renvoit ce nombre multiplié par 2.
- le thread principal attend la terminaison du thread "fils".
- Une fois terminé, le thread principal doit afficher à l'écran le nombre renvoyé par le thread fils.

La compilation passe. Ce qui est bizzare c'est que l'adresse retournée par le traitementTh1 et l'adresse reçue est la même. Ca doit coincer au niveau de ces deux lignes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
retVal=*((int *)retValTh1);
printf("\nValeur de la variable recu : %d\n", retVal);

Voici mon code :

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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
void * traitementTh1(void * nbParamTh1);
 
int main()
{
        pthread_t idTh1;
        int errTh1, errAttenteTh1;
        int paramTh1; int retVal;
        void * retValTh1;
 
        // création du premier thread
        paramTh1=112;
        errTh1=pthread_create(& idTh1, NULL, traitementTh1, (void *) & paramTh1);
        if(errTh1!=0)
        { perror("Echec creation du premier thread"); exit(1); }
 
 
        // attente de la terminaison du premier thread
        errAttenteTh1=pthread_join(idTh1, &retValTh1);
        if(errAttenteTh1!=0)
        { perror("Echec attente terminaison thread 1"); exit(1); }
        else
        {
                retVal=*((int *)retValTh1);
                printf("\nValeur de la variable recu : %d\n", retVal);
        }
}
 
void * traitementTh1(void * nbParamTh1)
{
        int nb, nbMult;
 
        // conversion du type en entier du paramètre
        nb=*((int *) nbParamTh1);
        printf("\nParametre du thread1 : %d \n", nb);
 
        nbMult=nb * 2;
        pthread_exit((void *) &nbMult);
}
Merci d'avance.