noussa1985
Messages postés31Date d'inscriptionjeudi 14 juin 2007StatutMembreDernière intervention20 avril 2008
-
7 oct. 2007 à 03:10
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDerniè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é???
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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]);