Maison >développement back-end >C++ >Utilisation du programme C pour la synchronisation des threads afin d'imprimer les nombres en séquence
Étant donné un fil de discussion, le programme doit imprimer les fils de 0 à 10 selon leur priorité.
Les threads sont des processus légers qui s'exécutent dans un programme. Un programme simple peut contenir n threads.
Contrairement à Java, le standard du langage C/C++ ne prend pas en charge le multi-threading. Les threads POSIX (Pthreads) sont le standard du multi-threading en C/C++. Le langage C ne contient aucune prise en charge intégrée des applications multithread, mais s'appuie entièrement sur le système d'exploitation pour fournir cette fonctionnalité.
Afin d'utiliser les fonctions de thread, nous utilisons le fichier d'en-tête #include. Ce fichier d'en-tête contiendra toutes les fonctions liées aux threads de notre programme, telles que pthread_create(), etc.
La tâche actuelle consiste à utiliser la bibliothèque standard pthread fournie par le compilateur gcc pour synchroniser n threads. L'idée est d'obtenir le nombre de fils et d'imprimer 1 dans le premier fil, 2 dans le deuxième fil, 3 dans le troisième fil, jusqu'au dixième fil. La sortie contiendra des nombres de 1 à 10 en fonction de la priorité du thread. La traduction chinoise de
Start Step 1 -> Declare global variables as int MAX=10 and count=1 Step 2 -> declare variable thr of pthread_mutex_t and cond of pthread_cond_t Step 3 -> Declare Function void *even(void *arg) Loop While(count < MAX) Call pthread_mutex_lock(&thr) Loop While(count % 2 != 0) Call pthread_cond_wait(&cond, &thr) End Print count++ Call pthread_mutex_unlock(&thr) Call pthread_cond_signal(&cond) End Call pthread_exit(0) Step 4 -> Declare Function void *odd(void *arg) Loop While(count < MAX) Call pthread_mutex_lock(&thr) Loop While(count % 2 != 1) Call pthread_cond_wait(&cond, &thr) End Print count++ Call pthread_mutex_unlock(&thr) Call pthread_cond_signal(&cond) End Set pthread_exit(0) Step 5 -> In main() Create pthread_t thread1 and pthread_t thread2 Call pthread_mutex_init(&thr, 0) Call pthread_cond_init(&cond, 0) Call pthread_create(&thread1, 0, &even, NULL) Call pthread_create(&thread2, 0, &odd, NULL) Call pthread_join(thread1, 0) Call pthread_join(thread2, 0) Call pthread_mutex_destroy(&thr) Call pthread_cond_destroy(&cond) Stop
#include <pthread.h> #include <stdio.h> #include <stdlib.h> int MAX = 10; int count = 1; pthread_mutex_t thr; pthread_cond_t cond; void *even(void *arg){ while(count < MAX) { pthread_mutex_lock(&thr); while(count % 2 != 0) { pthread_cond_wait(&cond, &thr); } printf("%d ", count++); pthread_mutex_unlock(&thr); pthread_cond_signal(&cond); } pthread_exit(0); } void *odd(void *arg){ while(count < MAX) { pthread_mutex_lock(&thr); while(count % 2 != 1) { pthread_cond_wait(&cond, &thr); } printf("%d ", count++); pthread_mutex_unlock(&thr); pthread_cond_signal(&cond); } pthread_exit(0); } int main(){ pthread_t thread1; pthread_t thread2; pthread_mutex_init(&thr, 0); pthread_cond_init(&cond, 0); pthread_create(&thread1, 0, &even, NULL); pthread_create(&thread2, 0, &odd, NULL); pthread_join(thread1, 0); pthread_join(thread2, 0); pthread_mutex_destroy(&thr); pthread_cond_destroy(&cond); return 0; }
Si nous exécutons le programme ci-dessus, il générera la sortie suivante
1 2 3 4 5 6 7 8 9 10
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!