Maison  >  Article  >  développement back-end  >  Bibliothèque de threads POSIX

Bibliothèque de threads POSIX

王林
王林avant
2023-08-25 16:29:06843parcourir

Bibliothèque de threads POSIX

Pthreads fait référence à la norme POSIX (IEEE 1003.1c), qui définit des API pour la création et la synchronisation de threads. Cela définit la spécification du comportement du thread, pas l'implémentation. Les spécifications peuvent être implémentées par les concepteurs de systèmes d’exploitation comme ils le souhaitent. En conséquence, de nombreux systèmes implémentent la spécification Pthreads ; la plupart sont des systèmes de type UNIX, notamment Linux, Mac OS X et Solaris. Bien que Windows ne prenne pas en charge nativement Pthreads, certaines implémentations Windows tierces sont disponibles. Le programme C illustré à la figure 4.9 illustre l'API Pthreads de base pour créer un programme multithread qui calcule la somme d'entiers non négatifs dans des threads séparés. Dans un programme Pthreads, un thread distinct commence à s'exécuter dans une fonction spécifiée. Dans le programme ci-dessous, il s'agit de la fonction runner(). Lorsque ce programme démarre, un thread de contrôle distinct démarre dans main(). Ensuite, main() crée un deuxième thread, qui commence à contrôler dans la fonction runner(), après une certaine initialisation. Les deux threads partagent la somme globale des données.

Exemple

#include<pthread.h>
#include<stdio.h>
int sum;
/* this sum data is shared by the thread(s) */
/* threads call this function */
void *runner(void *param);
int main(int argc, char *argv[]){
   pthread t tid; /* the thread identifier */
   /* set of thread attributes */
   pthread attr t attr;
   if (argc != 2){
      fprintf(stderr,"usage: a.out </p><p>");
      return -1;
   }
   if (atoi(argv[1]) < 0){
      fprintf(stderr,"%d must be >= 0</p><p>",atoi(argv[1]));
      return -1;
   }
   /* get the default attributes */
   pthread attr init(&attr); /* create the thread */
   pthread create(&tid,&attr,runner,argv[1]);
   /* wait for the thread to exit */
   pthread join(tid,NULL);
   printf("sum = %d</p><p>",sum);
}
/* The thread will now begin control in this function */
void *runner(void *param){
   int i, upper = atoi(param);
   sum = 0;
   for (i = 1; i <= upper; i++)
      sum += i;
   pthread exit(0);
}

Programme C multithread utilisant l'API Pthreads.

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