POSIX Threads
Z Wikipedii
POSIX Threads (wątki POSIX) – implementacja wielowątkowości wchodząca w skład standardu POSIX. Implementacja obejmuje definicję jednolitego API, które pozwala tworzyć i obsługiwać wątki.
Standard ten jest bardzo dobrze rozpowszechniony wśród systemów opartych na Uniksie. Istnieje również nieoficjalna implementacja na platformę Microsoft Windows.
Spis treści |
[edytuj] Opis biblioteki
Typy:
- pthread_t: wątek
- pthread_attr_t: atrybut wątku
Funkcję pozwalające manipulować wątkami (pominięto argumenty funkcji):
- pthread_create (): tworzy nowy wątek
- pthread_exit (): kończy obecny wątek
- pthread_cancel (): anuluje inny wątek
- pthread_join (): blokuje obecny wątek, do czasu zakończenia innego
- pthread_attr_init (): inicjalizuje argumenty wątku
- pthread_attr_setdetachstate ():
- pthread_attr_destroy (): niszczy argumenty wątku
Synchronizacja wątków:
- pthread_mutex_init ()
- pthread_mutex_destroy ()
- pthread_mutex_lock ()
- pthread_mutex_trylock ()
- pthread_mutex_unlock ()
- pthread_cond_init ()
- pthread_cond_signal ()
- pthread_cond_wait ()
[edytuj] Przykład
Przykład wykorzystania Pthread w języku C:
#include <pthread.h> #include <stdlib.h> #include <stdio.h> void *thread_func( void *vptr_args ); int main( void ){ int i, j; pthread_t thread; pthread_create( &thread, NULL, &thread_func, NULL ); for( j= 0; j < 20; ++j ){ fprintf( stdout, "a\n" ); for( i= 99999999; i; --i ); /* use some CPU time */ } pthread_join( thread, NULL ); exit( EXIT_SUCCESS ); } void *thread_func( void *vptr_args ){ int i, j; for( j= 0; j < 20; ++j ){ fprintf( stderr, " b\n" ); for( i= 99999999; i; --i ); /* use some CPU time */ } return NULL; }
Program tworzy nowy wątek, który wypisuje na ekranie linie zawierające literę 'b', podczas gdy główny wątek wypisuje linie zawierające składające się z litery 'a'. Wynikiem działania programu jest ciąg występujących naprzemiennie liter 'a' i 'b', co jest przykładem symultanicznej pracy dwóch wątków.