Maison  >  Article  >  développement back-end  >  Utilisation du programme C pour la synchronisation des threads afin d'imprimer les nombres en séquence

Utilisation du programme C pour la synchronisation des threads afin d'imprimer les nombres en séquence

王林
王林avant
2023-08-26 22:45:061327parcourir

Utilisation du programme C pour la synchronisation des threads afin dimprimer les nombres en séquence

Étant donné un fil de discussion, le programme doit imprimer les fils de 0 à 10 selon leur priorité.

Qu'est-ce qu'un fil de discussion ?

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é.

Comment ça marche dans notre programme ?

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

Algorithm

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

Example

est :

Example

#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;
}

Output

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer