pthread

POSIX Threads або pthreads — стандарт POSIX реалізації потоків виконання, який визначає API для створення та управління ними.

Бібліотеки, які реалізують цей стандарт та його функції, звичайно називаються pthreads. Найширше використовуються у Unix-подібних операційних системах, як от Linux чи Solaris, також існує реалізація для Microsoft Windows (Pthreads-w32).

Вміст[ред. | ред. код]

Pthreads визначає набір типів даних, функцій і констант в форматі мови програмування C. Вони описані в файлі заголовку pthread.h і реалізовані у вигляді бібліотеки.

Всі процедури Pthreads мають назви з префіксом pthread_ і можуть бути розділені на 4 категорії за призначенням:

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; } 

Дивись також[ред. | ред. код]

Посилання[ред. | ред. код]