Le fil ne s’imprime pas dans le bon ordre

Je suis assez nouveau dans les threads en C. Pour ce programme, je dois déclarer un thread que je passe dans une boucle for qui est destiné à imprimer les printfs à partir du thread.

Je n’arrive pas à le faire imprimer dans le bon ordre. Voici mon code:

#include  #include  #include  #define NUM_THREADS 16 void *thread(void *thread_id) { int id = *((int *) thread_id); printf("Hello from thread %d\n", id); return NULL; } int main() { pthread_t threads[NUM_THREADS]; for (int i = 0; i < NUM_THREADS; i++) { int code = pthread_create(&threads[i], NULL, thread, &i); if (code != 0) { fprintf(stderr, "pthread_create failed!\n"); return EXIT_FAILURE; } } return EXIT_SUCCESS; } //gcc -o main main.c -lpthread 

C’est l’exemple classique de la compréhension du multi-threading. Les threads s’exécutent simultanément, planifiés par le planificateur de système d’exploitation. Il n’existe pas de “bon ordre” quand on parle de courir en parallèle.

De plus, les tampons sont vides pour la sortie stdout. Cela signifie que lorsque vous “imprimez” quelque chose, il n’est pas promis que cela se produira immédiatement, mais après avoir atteint une limite / un délai d’attente de la mémoire tampon.

En outre, si vous souhaitez effectuer le travail dans le “bon ordre”, cela signifie que vous devez attendre que le premier thread termine son travail avant de regarder le prochain. Utilisez “join”: http://man7.org/linux/man-pages/ man3 / pthread_join.3.html

UPD: le passage du pointeur sur thread_id est également incorrect dans ce cas, car un thread peut imprimer un identifiant qui ne lui appartient pas (merci Kevin)