0
votes

Index pas incrémenter dans le thread, C Programme C

J'écris un programme multi-threadé dans C qui prend une liste de nombres à partir de la ligne de commande, puis utilise 3 fils séparés pour obtenir le nombre moyen, maximum et min. Je l'ai terminé, mais je ne reçois pas la sortie correcte et je suis assez confus, car la raison pour laquelle il ne fonctionne pas est parce que ma variable d'index dans mes threads ne s'agit pas. Il reste juste à 0 quelle que soit quoi, même en essayant à la fois un moment et une boucle. Voici mon code:

Remarque: Je codage sur Linux xxx

sortie incorrecte: (les zéros sont viennent de mon énoncé d'impression pour vérifier si j'étais réellement incrémenté, ce que ce n'est pas. Il est coincé à 0) Mon moyen, max et Min ne calculent pas non plus correctement

programme GCC.C -Pthread

OS @ Debian: ~ $. /a.out 1 2 3 4 5

0

0

0

0

la moyenne La valeur est 2

la valeur minimale est 2

la valeur maximale est 2


1 commentaires

S'il vous plaît indent votre code .


3 Réponses :


0
votes

Vous devez probablement lire beaucoup plus sur la façon dont les threads fonctionnent et ce qu'ils sont utiles. Vos threads partageent des variables globales (y compris i) et de les mettre à jour sans aucun égard aux autres threads qui s'appuient sur eux. Si vous modifiez la section de votre programme principal à ce programme:

pthread_create(&thread1, NULL, Thread_Avg, (void *)num);
pthread_join(thread1, NULL);
pthread_create(&thread2, NULL, Thread_max, (void *)num);
pthread_join(thread2, NULL);
pthread_create(&thread3, NULL, Thread_min, (void *)num);
pthread_join(thread3, NULL);


1 commentaires

Mes excuses, j'ai envoyé un courriel à mon code de ma machine virtuelle (sur mon ordinateur portable) et l'indentation a été perdue dans le courrier électronique. Aurait dû redéfinir sur Pile Exchange Post. L'ont corrigé de mieux que je peux



-1
votes
$ ./main 1 2 3 4 5
0
1
2
3
4
The average value is 3
The minimum value is 0
The maximum value is 5

3 commentaires

@Jonnyhaung J'ai essayé cela quelques fois avant de poster, bien que j'essayais de nouveau sur vos conseils. Toujours pas de chance, l'index reste à 0.


Mettre vos commentaires au code est un peu gênant. Au lieu de cela, vous auriez pu la résumer dans une réponse.


@Wedapashi vous remercie pour votre correction! Je vais corriger mes erreurs.



1
votes

Votre min algorithme ne fonctionnera pas correctement car la variable min est initialisée à 0 . Si toutes les valeurs d'entrée sont> 0, votre min sera incorrectement 0 . L'algorithme de max a la vérification supplémentaire et fonctionne correctement.

Vous avez également quelques Printf Bugs au format dans votre programme qui entraînera une affichage incorrecte des valeurs. Vous devez activer des avertissements dans votre compilateur, par exemple en ajoutant le drapeau -wall ou l'équivalent, pour vous aider à les identifier.

  1. printf ("%. f \ n", i); devrait être printf ("% d \ n", i);
  2. printf ("la valeur minimale est% .f \ n", min); devrait être printf ("la valeur minimale est% d \ n", min);
  3. printf ("la valeur maximale est% .f \ n", max); doit être printf ("la valeur maximale est% d \ n", max);

0 commentaires