POSIX Threads on POSIX -standardi suoritussäikeiden (säikeiden) toteuttamiseen . POSIX.1c - standardi Threads extensions ( IEEE Std 1003.1c-1995) määrittelee API :n säikeiden hallintaa, synkronointia ja ajoitusta varten.
Tämän API:n toteutukset ovat olemassa useille UNIX - tyyppisille käyttöjärjestelmille ( GNU/Linux , Solaris , FreeBSD , OpenBSD , NetBSD , OS X ) sekä Microsoft Windowsille ja muille käyttöjärjestelmille.
Kirjastoja, jotka toteuttavat tämän standardin (ja tämän standardin toiminnot), kutsutaan yleensä Pthreadiksi (funktioiden etuliitteenä on "pthread_").
Pthreads määrittelee joukon tyyppejä ja funktioita C - ohjelmointikielessä . Otsikkotiedosto on pthread.h.
Esimerkki säikeiden käytöstä C -kielellä :
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <pthread.h> void wait_thread ( void ); void * thread_func ( void * ); int main ( int argc , char * argv [], char * envp []) { pthread_t säie ; if ( pthread_create ( & säiettä , NULL , säiettätoiminto , NULL )) return EXIT_FAILURE ; for ( etumerkitön int i = 0 ; i < 20 ; i ++ ) { laittaa ( "a" ); odota_säie (); } if ( pthread_join ( thread , NULL )) return EXIT_FAILURE ; paluu EXIT_SUCCESS ; } void wait_thread ( void ) { aika_t aloitusaika = aika ( NULL ) ; while ( aika ( NULL ) == aloitusaika ) {} } void * thread_func ( void * vptr_args ) { for ( etumerkitön int i = 0 ; i < 20 ; i ++ ) { fputs ( "b \n " , stderr ); odota_säie (); } return NULL ; }Esimerkki säikeiden käytöstä C++ :ssa :
#include <cstdlib> #include <iostream> #sisällytä <muisti> #include <unistd.h> #include <pthread.h> class Thread { julkinen : virtuaalinen ~ Säie () {} virtuaalinen tyhjäkäynti ( ) = 0 ; int alku () { return pthread_create ( & _ThreadId , NULL , Thread :: thread_func , this ); } int odota () { return pthread_join ( _ThreadId , NULL ); } suojattu : pthread_t _ThreadId ; Säie ( const Säie & ); void * thread_func ( void * d ) { ( static_cast < Thread *> ( d )) -> suorita (); return NULL ; } }; class TestingThread : public Thread { julkinen : TestingThread ( const char * pcszText ) : _pcszText ( pcszText ) {} virtual void run () { for ( unsigned int i = 0 ; i < 20 ; i ++ , Sleep ( 1000 )) std :: cout << _pcszText << std :: endl ; } suojattu : const char * _pcszText ; }; int main ( int argc , char * argv [], char * envp []) { TestingThread ThreadA ( "a" ); TestingThread ThreadB ( "b" ); palauta lankaA . aloita () || LankaB . aloita () || LankaA . odota () || LankaB . odota () ? EXIT_FAILURE : EXIT_SUCCESS ; }Esitetyt ohjelmat käyttävät kahta säiettä, jotka tulostavat viestejä konsoliin, joista toinen tulostaa "a":n ja toinen, joka tulostaa "b". Viestitulostus sekoitetaan säikeiden välisen suoritusvaihdon tai samanaikaisen suorituksen seurauksena moniprosessorijärjestelmissä .
Erona on, että C-ohjelma luo yhden uuden säikeen 'b':n tulostamiseksi, kun taas pääsäie tulostaa 'a'. Pääsäie (aaaaa…. tulostuksen jälkeen) odottaa alasäikeen päättymistä.
C++-ohjelma luo kaksi uutta säiettä, joista toinen tulostaa 'a', toinen 'b' vastaavasti. Pääsäie odottaa, että molemmat alasäikeet valmistuvat.