C(Linux)thread

Signaler
Messages postés
31
Date d'inscription
jeudi 14 juin 2007
Statut
Membre
Dernière intervention
20 avril 2008
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
st tt le monde
SVP eske qqu'1 pe m'aider à ecrire un code en C(Linux) en utilisant les threads
Mon pgm permet de calculer le carré des entiers entre 0 et 90 et de mettre chaque val retournée dans un thread séparé,puis retourner un tableau de double contenant les résultats.le main thread doit afficher un court message à l'user et afficher les resultats  calculés qd ils seront prets.
voici le code que j'arrive à faire  et je suis sur qu'il contient +ieurs erreurs:
#include

Void *Carre(void *arg)

{

       int i,a ;

       i=a*a;
      return i;  //est ce que c juste,car  c void et j doit retourner le carré??? 

}

int
main(void)

{
    int i;

   pthread_t thread_Id[100];

   void *exit_status;
   double *tab=(*double)malloc(100);

            for(i=0;i<100;i++)

              {

                       pthread_create(&thread_Id[i],NULL, Carre,&i);
                      pthread_join(thread_Id[i],
&exit_status);

       //franchment je sais pas c koi l'utilité de pthread_join ni de exit_status                      tab[i]=exit_status;  //c juste???

                   printf("le thread  %d a comme valeur %d",i,tab[i]);
                }

            return 0;
 }

 J'esper ke qqu'1 pe me corriger ce code avant 2min soir si c possible biensur car il va etre noté.

Si  qqu'1 un nom de site de C(Linus) avec les threads il me donne.

Bn et merci d'avance pour votre aide.

2 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Par définition la documentation d'une librairie explique son fonctionnement...
http://www.opengroup.org/onlinepubs/007908799/xsh/pthread.h.html
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,


3ème commandement de CodeS-Source : Le langage SMS tu n'utiliseras pas.
Bon, après il parle d'orthographe, mais j'ai jamais compris ce que ça
voulait dire...


Le pire de ce que tu as écrit se situe au niveau de ta fonction Carre.
Tu fait i = a * a, alors que tu as jamais initialisé a. Le reste est
pas trop moche et pas mal trouvé.


Voilà une solution qui compile et fonctionne, mais je ne suis pas sûr
qu'il respecte ton énoncé que j'ai pas trop compris. En même temps
c'est un peu tard pour toi il me semble.
#include "pthread.h"
#include "stdio.h"

// Attention, le nombre maximum de threads par processus peut
// être très bas, parfois 10.
#define NUM_THREAD 15

void * Carre(void * arg);

int main(int argc, char ** argv)
{
pthread_t thread_Id[NUM_THREAD]; // Stockage des IDs des threads
int exit_status; // Récupération de la réponse des threads
int error; // Récupération des codes d'erreur
double tab[NUM_THREAD]; // Stockage des résultats
int i;

// Lancement des threads
for( i = 0 ; i < NUM_THREAD ; i++)
{
error = pthread_create(&thread_Id[i], NULL, Carre, (void *)i);

// Vérification que la création s'est bien passée
if (error)
{
printf("Failed to create thread %d, error %d\n", i, error);
thread_Id[i] = 0;
}
}

// Attente de la fin des threads et récupération des calculs
for (i = 0 ; i < NUM_THREAD ; i++)
if (thread_Id[i])
{
error = pthread_join(thread_Id[i], (void **)&exit_status);
if (error)
{
printf("Failed to join thread %d, error %d\n", i, error);
tab[i] = -1;
}
else
tab[i] = (double)exit_status;
}
else
tab[i] = -1;

// Affichage des résultats
for (i = 0 ; i < NUM_THREAD ; i++)
printf("%f\n", tab[i]);

return 0;
}

void * Carre(void * arg)
{
pthread_exit((void *)(int)((int)arg * (int)arg));
}

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08