Linux repositories inspector

pthread_spin_init(3) - Russkiy

Linux
2017-09-30
Aliases: pthread_spin_destroy(3), pthread_spin_destroy(3), pthread_spin_destroy(3)

man-pages-ru

Russian man pages from the Linux Documentation Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

ИМЯ

pthread_spin_init, pthread_spin_destroy - инициализирует или уничтожает циклическую блокировку

ОБЗОР

#include <pthread.h>

int pthread_spin_init(pthread_spinlock_t *lock, int pshared); int pthread_spin_destroy(pthread_spinlock_t *lock);
Компилируется и компонуется вместе с -pthread.
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
pthread_spin_init(), pthread_spin_destroy():

_POSIX_C_SOURCE >= 200112L

ОПИСАНИЕ

Общее замечание: Большинству программ достаточно использования мьютексов, а не циклических блокировок. В основном, циклические блокировки полезны при применении алгоритмов планирования реального времени. Смотрите ЗАМЕЧАНИЯ.
Функция pthread_spin_init() выделяет ресурсы, требуемые для работы циклической блокировки, на которую указывает lock, и инициализирует блокировку в неблокированном состоянии. В аргументе pshared должно быть одно из следующих значений:
PTHREAD_PROCESS_PRIVATE
Циклическая блокировка будет использоваться только нитями одного процесса, которому принадлежит вызвавшая pthread_spin_init() нить (попытка использования такой циклической блокировки между процессами приводит к непредсказуемому поведению).
PTHREAD_PROCESS_SHARED
Циклическая блокировка может использоваться любой нитью любого процесса, который имеет доступ к памяти, содержащей блокировку (т. е., блокировка может находиться в объекте общей памяти, который используется несколькими процессами).
Вызов pthread_spin_init() с уже инициализированной циклической блокировкой приводит к непредсказуемому поведению.
Функция pthread_spin_destroy() уничтожает ранее инициализированную циклическую блокировку, освобождая все выделенные ей ресурсы. Уничтожение ещё не инициализированной циклической блокировки или уничтожение циклической блокировки, которая захвачена другой нитью,приводит к непредсказуемым результатам.
После того, как циклическая блокировка уничтожена, выполнение с ней любой операции кроме инициализации pthread_spin_init() приводит к непредсказуемому поведению.
Результат выполнения операций pthread_spin_lock(3), pthread_spin_unlock(3) и pthread_spin_destroy(3) с копией объекта, на который указывает lock, не определён.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении эти функции возвращают ноль. При ошибке возвращается номер ошибки. Если ошибкой завершается pthread_spin_init(), то инициализация блокировки не происходит.

ОШИБКИ

Функция pthread_spin_init() может завершаться со следующими ошибками:
EAGAIN В системе не хватает ресурсов для инициализации новой циклической блокировки.
ENOMEM Недостаточно памяти для инициализации циклической блокировки.

ВЕРСИИ

Эти функции впервые появились в glibc 2.2.

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2001.
Поддержка общих для процессов циклических блокировок указана в POSIX. Она поддерживается реализацией glibc.

ЗАМЕЧАНИЯ

Циклические блокировки должны использоваться вместе с алгоритмами выполнения реального времени (SCHED_FIFO или, возможно, SCHED_RR). Использование циклических блокировок с недерминированными алгоритмами планирования, такими как SCHED_OTHER, вероятно, указывают на ошибки при проектировании. Проблема в том, что если нить, выполняющаяся по такому алгоритму, вытеснится с ЦП в момент когда она удерживает циклическую блокировку, остальные нити будут впустую тратить время на ожидание блокировки, пока держатель не будет запланирован к выполнению и не освободит блокировку.
Если нити создают ситуацию взаимной блокировки при работе с циклическими блокировками, то эти нити будут ждать блокировку бесконечно потребляя время ЦП.
Циклические блокировки пользовательского пространства не применяются в качестве обычного решения по блокировкам. Они, по определению, подвержены смене приоритетов и неограниченны по времени ожидания. Программист, использующий циклические блокировки, должен быть исключительно осмотрителен не только с кодом, но и с настройкой системы, размещением нити и назначением приоритета.
⇧ Top