C(Linux)thread

noussa1985 Messages postés 31 Date d'inscription jeudi 14 juin 2007 Statut Membre Dernière intervention 20 avril 2008 - 7 oct. 2007 à 03:10
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 12 oct. 2007 à 14:14
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
7 oct. 2007 à 18:48
Par définition la documentation d'une librairie explique son fonctionnement...
http://www.opengroup.org/onlinepubs/007908799/xsh/pthread.h.html
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
12 oct. 2007 à 14: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
0
Rejoignez-nous