POSIX Threads er POSIX- standarden til implementering af tråde (tråde) af eksekvering . POSIX.1c -standarden, Threads extensions ( IEEE Std 1003.1c-1995) definerer en API til trådstyring, synkronisering og planlægning.
Implementeringer af denne API findes for et stort antal UNIX -lignende operativsystemer ( GNU/Linux , Solaris , FreeBSD , OpenBSD , NetBSD , OS X ), såvel som til Microsoft Windows og andre operativsystemer.
Biblioteker, der implementerer denne standard (og funktionerne i denne standard) kaldes normalt Pthreads (funktionerne er foranstillet med "pthread_").
Pthreads definerer et sæt typer og funktioner i programmeringssproget C. Header-filen er pthread.h.
Et eksempel på brug af tråde i C -sprog :
#include <stdio.h> #include <stdlib.h> #inkluder <tid.h> #include <pthread.h> void wait_thread ( ugyldig ); void * thread_func ( void * ); int main ( int argc , char * argv [], char * envp []) { pthread_t tråd ; if ( pthread_create ( & tråd , NULL , thread_func , NULL )) returner EXIT_FAILURE ; for ( usigneret int i = 0 ; i < 20 ; i ++ ) { sætter ( "a" ); vente_tråd (); } if ( pthread_join ( tråd , NULL )) returner EXIT_FAILURE ; returner EXIT_SUCCESS ; } void wait_thread ( void ) { time_t start_time = tid ( NULL ); while ( tid ( NULL ) == starttid ) {} } void * thread_func ( void * vptr_args ) { for ( usigneret int i = 0 ; i < 20 ; i ++ ) { fputs ( "b \n " , stderr ); vente_tråd (); } returner NULL ; }Et eksempel på brug af tråde i C++ :
#include <cstdlib> #include <iostream> #inkluder <hukommelse> #include <unistd.h> #include <pthread.h> klasse Tråd { offentligt : virtuel ~ Tråd () {} virtual void run () = 0 ; int start () { return pthread_create ( & _ThreadId , NULL , Thread :: thread_func , this ); } int wait () { return pthread_join ( _ThreadId , NULL ); } beskyttet : pthread_t _ThreadId ; Tråd ( konst Tråd & ); void * thread_func ( void * d ) { ( static_cast < Thread *> ( d )) -> run (); returner NULL ; } }; klasse TestingThread : offentlig tråd { offentligt : TestingThread ( const char * pcszText ) : _pcszText ( pcszText ) {} virtual void run () { for ( unsigned int i = 0 ; i < 20 ; i ++ , Sleep ( 1000 )) std :: cout << _pcszText << std :: endl ; } beskyttet : const char * _pcszText ; }; int main ( int argc , char * argv [], char * envp []) { TestingThread ThreadA ( "a" ); Testtråd ThreadB ( "b" ); returner tråd A. start () || TrådB . start () || Tråd A. vent () || TrådB . vente () ? EXIT_FAILURE : EXIT_SUCCESS ; }De viste programmer bruger to tråde, der udskriver beskeder til konsollen, en der udskriver 'a' og en der udskriver 'b'. Meddelelsesoutput er blandet som et resultat af eksekveringsskift mellem tråde eller samtidig udførelse på multiprocessorsystemer .
Forskellen er, at C-programmet opretter én ny tråd for at udskrive 'b', mens hovedtråden udskriver 'a'. Hovedtråden (efter at have udskrevet 'aaaaa...') venter på, at den underordnede tråd afsluttes.
C++-programmet opretter to nye tråde, den ene udskriver henholdsvis 'a', den anden udskriver 'b'. Hovedtråden venter på, at begge undertråde er færdige.