POSIX Threads або pthreads — стандарт POSIX реалізації потоків виконання, який визначає API для створення та управління ними.
Бібліотеки, які реалізують цей стандарт та його функції, звичайно називаються pthreads. Найширше використовуються у Unix-подібних операційних системах, як от Linux чи Solaris, також існує реалізація для Microsoft Windows (Pthreads-w32).
Вміст
Pthreads визначає набір типів даних, функцій і констант в форматі мови програмування C. Вони описані в файлі заголовку pthread.h і реалізовані у вигляді бібліотеки.
Всі процедури Pthreads мають назви з префіксом pthread_
і можуть бути розділені на 4 категорії за призначенням:
- Управляння потоками — створення, об'єднання потоків та ін.;
- М'ютекси;
- ;
- Синхронізація потоків з використанням блокування (lock) і бар'єрів (barriers) читання/запису даних.
POSIX API для семафорів працює з потоками POSIX, але не є частиною стандарту роботи з потоками, визначається в додатковому стандарті POSIX.1b, Real-time extensions (IEEE Std 1003.1b-1993). Всі процедури для роботи з семафорами, відповідно, мають префікс sem_
замість pthread_
.
Основні функції стандарту
- Типи даних:
pthread_t
: дескриптор потокуpthread_attr_t
: набір атрибутів потоку
- Функції управління потоками:
pthread_create()
: створення потокуpthread_exit()
: завершення потокуpthread_cancel()
: відміна потокуpthread_join()
: блокування потоку до завершення іншого потоку, вказаного у виклику функціїpthread_detach()
: звільнити ресурси зайняті потоком (якщо потік виконується, звільнення ресурсів відбудеться після його завершення)pthread_attr_init()
: ініціалізація структури атрибутів потокуpthread_attr_setdetachstate()
: вказівка системі, що вона після завершення потоку може звільнити ресурси, зайняті потокомpthread_attr_destroy()
: звільнення пам'яті від структури атрибутів потоку (знищити дескриптор)
- Функції синхронізації потоків:
pthread_mutex_init()
,pthread_mutex_destroy()
,pthread_mutex_lock()
,pthread_mutex_trylock()
,pthread_mutex_unlock()
: за допомогою м'ютексівpthread_cond_init()
,pthread_cond_signal()
,pthread_cond_wait()
: за допомогою умовних змінних
Приклад
Приклад використання POSIX потоків.
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #define THREADS_MAX 4 void *function(void *param) { int id = (int)param; int i, loops = 10; for(i = 0; i < loops; i++) { printf("thread %d: loop %d\n", id, i); } pthread_exit(NULL); } int main(void) { pthread_t threads[THREADS_MAX]; int i; printf("pre-execution\n"); for (i = 0; i < THREADS_MAX; i++) { pthread_create(&threads[i], NULL, function, (void *)i); } printf("mid-execution\n"); for (i = 0; i < THREADS_MAX; i++) { pthread_join(threads[i], NULL); } printf("post-execution\n"); return EXIT_SUCCESS; }
Дивись також
Посилання
- The Open Group Base Specifications Issue 6, IEEE Std 1003.1 [ 21 лютого 2004 у Wayback Machine.]
- POSIX-потоки та синхронні обробники [ 18 грудня 2008 у Wayback Machine.] {
- Багатопоточне програмування (Підручник Pthreads) [ 29 січня 2009 у Wayback Machine.]
- Приклади використання Pthreads [ 28 вересня 2006 у Wayback Machine.]
- Приклади використання Pthreads в C/C++ [ 9 травня 2008 у Wayback Machine.]
- Статья «Пояснюючи потоки POSIX [ 3 серпня 2008 у Wayback Machine.]», Даніеля Роббінса (засновника проекту Gentoo)
- Інтерв'ю «10 питань Девіду Бутенхофу про паралельне програмування та потоки POSIX [ 28 червня 2008 у Wayback Machine.]» з Майклом Суіссом
- GNU Portable threads [ 12 липня 2008 у Wayback Machine.]
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
POSIX Threads abo pthreads standart POSIX realizaciyi potokiv vikonannya yakij viznachaye API dlya stvorennya ta upravlinnya nimi Biblioteki yaki realizuyut cej standart ta jogo funkciyi zvichajno nazivayutsya pthreads Najshirshe vikoristovuyutsya u Unix podibnih operacijnih sistemah yak ot Linux chi Solaris takozh isnuye realizaciya dlya Microsoft Windows Pthreads w32 VmistPthreads viznachaye nabir tipiv danih funkcij i konstant v formati movi programuvannya C Voni opisani v fajli zagolovku pthread h i realizovani u viglyadi biblioteki Vsi proceduri Pthreads mayut nazvi z prefiksom pthread i mozhut buti rozdileni na 4 kategoriyi za priznachennyam Upravlyannya potokami stvorennya ob yednannya potokiv ta in M yuteksi Sinhronizaciya potokiv z vikoristannyam blokuvannya lock i bar yeriv barriers chitannya zapisu danih POSIX API dlya semaforiv pracyuye z potokami POSIX ale ne ye chastinoyu standartu roboti z potokami viznachayetsya v dodatkovomu standarti POSIX 1b Real time extensions IEEE Std 1003 1b 1993 Vsi proceduri dlya roboti z semaforami vidpovidno mayut prefiks sem zamist pthread Osnovni funkciyi standartu Tipi danih pthread t deskriptor potoku pthread attr t nabir atributiv potoku Funkciyi upravlinnya potokami pthread create stvorennya potoku pthread exit zavershennya potoku pthread cancel vidmina potoku pthread join blokuvannya potoku do zavershennya inshogo potoku vkazanogo u vikliku funkciyi pthread detach zvilniti resursi zajnyati potokom yaksho potik vikonuyetsya zvilnennya resursiv vidbudetsya pislya jogo zavershennya pthread attr init inicializaciya strukturi atributiv potoku pthread attr setdetachstate vkazivka sistemi sho vona pislya zavershennya potoku mozhe zvilniti resursi zajnyati potokom pthread attr destroy zvilnennya pam yati vid strukturi atributiv potoku znishiti deskriptor Funkciyi sinhronizaciyi potokiv pthread mutex init pthread mutex destroy pthread mutex lock pthread mutex trylock pthread mutex unlock za dopomogoyu m yuteksiv pthread cond init pthread cond signal pthread cond wait za dopomogoyu umovnih zminnihPrikladPriklad vikoristannya POSIX potokiv include lt stdio h gt include lt stdlib h gt include lt pthread h gt define THREADS MAX 4 void function void param int id int param int i loops 10 for i 0 i lt loops i printf thread d loop d n id i pthread exit NULL int main void pthread t threads THREADS MAX int i printf pre execution n for i 0 i lt THREADS MAX i pthread create amp threads i NULL function void i printf mid execution n for i 0 i lt THREADS MAX i pthread join threads i NULL printf post execution n return EXIT SUCCESS Divis takozhNit OpenMP NPTL PosilannyaThe Open Group Base Specifications Issue 6 IEEE Std 1003 1 21 lyutogo 2004 u Wayback Machine POSIX potoki ta sinhronni obrobniki 18 grudnya 2008 u Wayback Machine Bagatopotochne programuvannya Pidruchnik Pthreads 29 sichnya 2009 u Wayback Machine Prikladi vikoristannya Pthreads 28 veresnya 2006 u Wayback Machine Prikladi vikoristannya Pthreads v C C 9 travnya 2008 u Wayback Machine Statya Poyasnyuyuchi potoki POSIX 3 serpnya 2008 u Wayback Machine Danielya Robbinsa zasnovnika proektu Gentoo Interv yu 10 pitan Devidu Butenhofu pro paralelne programuvannya ta potoki POSIX 28 chervnya 2008 u Wayback Machine z Majklom Suissom GNU Portable threads 12 lipnya 2008 u Wayback Machine Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi