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, Інтернет