Maison > développement back-end > C++ > Impression infinie 1 2 3 à l'aide de threads en langage C

Impression infinie 1 2 3 à l'aide de threads en langage C

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2023-08-29 08:17:02
avant
1207 Les gens l'ont consulté

使用C语言的线程无限打印1 2 3

Ici, nous devons imprimer la séquence 1 2 3 à plusieurs reprises pendant des temps infinis à l'aide de threads en langage de programmation C.

Jetons un coup d'œil à l'exemple de sortie de notre code :

1 2 3 1 2 3 1 2 3 1 2 3

Pour cela, nous devrons utiliser trois threads exécutés en parallèle dans le langage de programmation C. Il faut également une variable, initialisée à 1 dans le premier thread, et mettre à jour sa valeur en fonction de sa valeur précédente. Exécutez ensuite une boucle infinie à l’intérieur de la fonction.

Exemple

Jetons un coup d'œil au programme qui implémente notre solution :

#include <stdio.h>
#include <pthread.h>
pthread_cond_t cond1 = PTHREAD_COND_INITIALIZER;
pthread_cond_t cond2 = PTHREAD_COND_INITIALIZER;
pthread_cond_t cond3 = PTHREAD_COND_INITIALIZER;
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
int value = 1;
void *foo(void *n){
   while(1) {
      pthread_mutex_lock(&lock);
      if (value != (int)*(int*)n) {
         if ((int)*(int*)n == 1) {
            pthread_cond_wait(&cond1, &lock);
         } else if ((int)*(int*)n == 2) {
            pthread_cond_wait(&cond2, &lock);
         } else {
            pthread_cond_wait(&cond3, &lock);
         }
      }
      printf("%d ", *(int*)n);
      if (value == 3) {
         value = 1;
         pthread_cond_signal(&cond1);
      }
      else if(value == 1) {
         value = 2;
         pthread_cond_signal(&cond2);
      } else if (value == 2) {
            value = 3;
            pthread_cond_signal(&cond3);
      }
      pthread_mutex_unlock(&lock);
   }
   return NULL;
}
int main(){
   pthread_t tid1, tid2, tid3;
   int n1 = 1, n2 = 2, n3 = 3;
   pthread_create(&tid1, NULL, foo, (void *)&n1);
   pthread_create(&tid2, NULL, foo, (void *)&n2);
   pthread_create(&tid3, NULL, foo, (void *)&n3);
   while(1);
   return 0;
}
Copier après la connexion

Output

1 2 3 1 2 3 1 2 3 1 2 3 1 2 3&hellip;.
Copier après la connexion

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 de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal