Bonjour,
On me demande d’écrire un programme C créant un thread. Les deux threads (principal + celui créé) devront ensuite affichent cent fois "1" s’il s’agit du thread principal et "2" s’il s’agit du thread créé. En toute logique, l’exécution étant en parallèle, il n’y a aucune raison que l’un des threads soit plus rapide que l’autre pour afficher son chiffre à l’écran. Par conséquent, on s’attend à avoir sur la sortie des "1" et des "2" mélangés au nombre total de 200.
Pourtant, on remarque que les chiffres "1" apparaissent bien avant les chiffres "2" :
Qu’ai-je mal compris ? Pourquoi tous les "1" sont avant les "2" ?
Mon code :
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
void* th_sum(void* param)
{
int* n = (int*) param;
int* r = (int*) malloc(sizeof(int)); // On y mettra la valeur de retour du thread
if (!r)
{
perror("Erreur allocation : ");
exit(EXIT_FAILURE);
}
// Affiche n fois "2 " à l'écran
for (int i = 0; i < *n; ++i)
printf("2 ");
*r = 1; // Valeur de retour : tout s'est bien passé
return r;
}
int main()
{
int* th_ret;
int nb_iteration = 500;
pthread_t tid;
int err = pthread_create(&tid, NULL, th_sum, &nb_iteration);
if (err != 0)
{
errno = err;
perror("Erreur thread : ");
return EXIT_FAILURE;
}
// Affiche n fois "1 " à l'écran
for (int i = 0; i < nb_iteration; ++i)
printf("1 ");
pthread_join(tid, (void**) &th_ret);
printf("retour thread : %i\n", *th_ret);
free(th_ret);
return EXIT_SUCCESS;
}
+0
-0