pthreads
POSIX Threads, широко известный как pthreads, - это модель выполнения, существующая независимо от языка, а также модель параллельного выполнения. Она позволяет программе управлять несколькими различными потоками работы, которые пересекаются во времени. Каждая единица исполнения называется потоком (thread), а создание и управление этими потоками достигается путем обращения к POSIX Threads API. POSIX Threads - это API, определенный стандартом POSIX.1c, Threads extensions (IEEE Std 1003.1c-1995).
Реализации API доступны на многих Unix-подобных POSIX-совместимых операционных системах, таких как FreeBSD, NetBSD, OpenBSD, Linux, macOS, Android,[1] Solaris, Redox и AUTOSAR. Адаптивная, обычно поставляется в виде библиотеки libpthread. Для Microsoft Windows также существуют реализация в рамках подсистемы для приложений на базе UNIX (SFU), которая предоставляет собственную реализацию ряда POSIX API, а также в рамках пакетов сторонних разработчиков (third party), таких как pthreads-w32,[2], который реализует pthreads поверх существующего Windows API.
Содержание
pthreads определяет набор типов данных, функций и констант языка программирования C. Он реализуется с помощью заголовка pthread.h и библиотеки потоков.
Существует около 100 процедур потоков, все они имеют префикс pthread_
, и их можно разделить на четыре группы:
- Управление потоками — создание, объединение потоков и т.д.
- Мьютексы
- Условные переменные (condition variables)
- синхронизация между потоками с помощью блокировки чтения-записи и барьеры.
- Спин-блокировки (spinlock)[3]
API семафоров POSIX работает с потоками POSIX, но не является частью стандарта threads, а определен в стандарте POSIX.1b, Real-time extensions (IEEE Std 1003.1b-1993). В связи с этим процедуры семафора имеют префикс sem_
вместо pthread_
.
- ↑ c libc/bionic/pthread.c - platform/bionic - Git at Google . android.googlesource.com.
- ↑ Pthread Win-32: Level of standards conformance (22 декабря 2006). Дата обращения: 29 августа 2010.
- ↑ pthread.h(0p) — Linux manual page . Дата обращения: 18 декабря 2022.