Pthreads
Pthreads je v informační technologii POSIXový standard pro vlákno (thread). Standard, POSIX.1c, Threads rozšíření (IEEE Std 1003.1c-1995), definuje API pro vytváření a manipulaci s vlákny.
Implementace API je možná na mnohých Unix-like operačních systémech podporujících POSIX jako např. FreeBSD, NetBSD, OpenBSD, GNU/Linux (projekt NPTL), Mac OS X, Solaris, DR-DOS a implementace pro Microsoft Windows také existuje za použití podsystému SFU/SUA, který poskytuje nativní implementaci několika POSIX API, popř. také při využití balíčků třetí strany pthreads-w32,[1] který implementuje pthreads na vrcholu stávajících Windows API.
Obsah
Pthreads definuje několik datových typů, funkcí a konstant pro programovací jazyk C. K použití vláken v programu je nutné připojit hlavičkový soubor pthread.h Archivováno 16. 8. 2008 na Wayback Machine.. Implementace vláken se nachází v knihovně libpthread.
Existuje něco kolem 100 Pthread procedur, všechny s prefixem "pthread_" a mohou být rozděleny do čtyř skupin:
- Manipulace s vlákny – vytváření, spojování, atd.
- Mutexy
- Podmínkové proměnné
- Synchronizace mezi vlákny za použití čtecích/zapisovacích zámků a bariér
POSIXové semaforové API pracuje s POSIX vlákny, ale není částí standardů pro práci s vlákny, které byly definovány ve standardu POSIX.1b, real-time rozšíření (IEEE Std 1003.1b-1993). Proto mají semaforové procedury prefix "sem_" a ne "pthread_".
Příklad
Příklad ukazující použití Pthreads v jazyce C:
#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #define NUM_THREADS 5 void *TaskCode(void *argument) { int tid; tid = *((int *) argument); printf("Ahoj světe! To jsem já, vlákno %d!\n", tid); /* Zde je možnost vložit užitečné věci :-) */ return NULL; } int main(void) { pthread_t threads[NUM_THREADS]; int thread_args[NUM_THREADS]; int rc, i; /* vytvoření všech vláken */ for (i=0; i<NUM_THREADS; ++i) { thread_args[i] = i; printf("Ve fci main: vytváření vlákna %d\n", i); rc = pthread_create(&threads[i], NULL, TaskCode, (void *) &thread_args[i]); assert(0 == rc); } /* čekání na dokončení všech vláken */ for (i=0; i<NUM_THREADS; ++i) { rc = pthread_join(threads[i], NULL); assert(0 == rc); } exit(EXIT_SUCCESS); }
Tento program vytváří 5 vláken, každé spouští funkci TaskCode, která vypisuje unikátní číslo daného vlákna do standardního výstupu. Pokud programátor chce, aby vlákna mezi sebou komunikovala, vyžadovalo by to definování globální proměnné a ošetření souběhu.
POSIX vlákna pro Windows
Windows nativně nepodporuje standard pthreads, proto se projekt Pthreads-w32 snaží poskytnout přenosnou open-source implementaci. S malou nebo žádnou modifikací mohou být také použity Unix programy (které využívají pthreads) do platformy Windows.[2] Poslední verze 2.8.0 je kompatibilní s 64bitovými systémy Windows.[3][4]
Interix – prostředí dostupné ve Windows Services pro UNIX/Subsystem pro aplikace založené na UNIXu. Balíček poskytuje nativní port pthreads API, tj. nenamapováno na Win32/Win64 API ale vytvořen přímo v operačním systému "syscall" rozhraní.[5]
Odkazy
Reference
- ↑ Pthread Win-32: Level of standards conformance [online]. 2006-12-22 [cit. 2010-08-29]. Dostupné online. Je zde použita šablona
{{Cite web}}
označená jako k „pouze dočasnému použití“. - ↑ HART, Johnson M. Experiments with the Open Source Pthreads Library and Some Comments [online]. 2004-11-21 [cit. 2010-08-29]. Dostupné v archivu pořízeném dne 2010-08-30. Je zde použita šablona
{{Cite web}}
označená jako k „pouze dočasnému použití“. - ↑ pthread-win32_x64.zip Source and binary for Pthreads-w32 v2.8.0 [online]. 2010-01-26 [cit. 2010-08-29]. Dostupné online. Je zde použita šablona
{{Cite web}}
označená jako k „pouze dočasnému použití“. - ↑ Forum discussion: pthreads-on-64bit-Windows [online]. 2010-01-26 [cit. 2010-08-29]. Dostupné v archivu pořízeném dne 2010-12-15. Je zde použita šablona
{{Cite web}}
označená jako k „pouze dočasnému použití“. - ↑ Chapter 1: Introduction to Windows Services for UNIX 3.5 [online]. Dostupné online. Je zde použita šablona
{{Cite web}}
označená jako k „pouze dočasnému použití“.
Literatura
- David R. Butenhof. Programming with POSIX Threads. [s.l.]: Addison-Wesley ISBN 0-201-63392-2. Je zde použita šablona
{{Cite book}}
označená jako k „pouze dočasnému použití“. - Bradford Nichols, Dick Buttlar, Jacqueline Proulx Farell. Pthreads Programming. [s.l.]: O'Reilly & Associates Dostupné online. ISBN 1-56592-115-1. Je zde použita šablona
{{Cite book}}
označená jako k „pouze dočasnému použití“. - Charles J. Northrup. Programming with UNIX Threads. [s.l.]: John Wiley & Sons ISBN 0-471-13751-0. Je zde použita šablona
{{Cite book}}
označená jako k „pouze dočasnému použití“. - Kay A. Robbins and Steven Robbins. UNIX Systems Programming. [s.l.]: Prentice-Hall Dostupné online. ISBN 0-13-042411-0. Je zde použita šablona
{{Cite book}}
označená jako k „pouze dočasnému použití“.
Související články
Externí odkazy
- Výuka Pthreads Archivováno 14. 2. 2021 na Wayback Machine.
- Výuka C/C++: používání Pthreads
- Článek "Vysvětlení POSIX vláken" od Daniela Robbinse (zakladatel Gentoo Linux)
- Interview "10 otázek pro Davida Butenhofa o paralelním programování a POSIX vlákna" od Michaela Suesse
- Open Source POSIX vlákna pro Win32 Archivováno 26. 8. 2008 na Wayback Machine.
- Open Group Base specifikace 6. vydání, IEEE Std 1003.1
- Pthreads Presentation at 2007 OSCON (O'Reilly Open Source konvence) od Adriena Lamotha. Přehled pthreads se současnými trendy. Archivováno 24. 4. 2013 na Wayback Machine.
- Porovnání programovatelnosti Open MP a pthreads