Des implémentations de l'API sont disponibles sur de nombreux systèmes d'exploitation Unix conformes à POSIX tels que FreeBSD , NetBSD , OpenBSD , Linux , macOS , Android , Solaris , Redox , QNX et AUTOSAR Adaptive, généralement regroupées dans la bibliothèque libpthread . Des implémentations existent également pour DR-DOS et Microsoft Windows : au sein du - système SFU /SUA , qui fournit une implémentation native de plusieurs API POSIX, ainsi que dans des paquets tiers tels que pthreads-w32 qui implémente pthreads sur l' Windows existante .
types , de fonctions et de constantes du langage de programmation C. Il est implémenté avec un fichier d'en-tête et une bibliothèque de threads .pthread.hIl existe une centaine de procédures de threads, toutes préfixées pthread_et pouvant être classées en cinq groupes :
- Gestion des threads – création, jonction de threads, etc.
- Mutex
- Variables de condition
- Synchronisation entre les threads à l'aide de verrous de lecture/écriture et de barrières
- Verrous de rotation
L' API des sémaphores POSIX fonctionne avec les threads POSIX, mais ne fait pas partie de la norme relative aux threads ; elle a été définie dans la norme POSIX.1b, Extensions temps réel (IEEE Std 1003.1b-1993) . Par conséquent, les procédures de sémaphore sont préfixées par `semaphore` au sem_lieu de `semaphore` pthread_.
Exemple
Un exemple illustrant l'utilisation de pthreads en C :
Ce programme crée cinq threads, chacun exécutant la fonction `perform_work` qui affiche son numéro unique sur la sortie standard. Pour que les threads puissent communiquer entre eux, il faudrait définir une variable globale en dehors de la portée de toutes les fonctions . Ce programme peut être compilé avec le compilateur gcc à l'aide de la commande suivante :
gcc pthreads_demo.c -pthread -o pthreads_demo
Voici l'un des nombreux résultats possibles de l'exécution de ce programme.
Le projet Mingw-w64 contient également une implémentation wrapper de 'pthreads, winpthreads ' , qui tente d'utiliser plus d'appels système natifs que le projet Pthreads4w.
Le sous-système d'environnement Interix disponible dans le package Windows Services for UNIX/Subsystem for UNIX-based Applications fournit un port natif de l'API pthreads, c'est-à-dire non mappé sur l'API Win32 mais construit directement sur l'interface d'appel système du système d'exploitation .