Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

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

LIBRARY

       POSIX threads library (libpthread, -lpthread)

СИНТАКСИС

       #include <pthread.h>

       int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
       int pthread_spin_destroy(pthread_spinlock_t *lock);

   Требования макроса тестирования свойств для 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() приводит к непредсказуемому поведению.

       The  result  of  performing  operations  such  as   pthread_spin_lock(3),   pthread_spin_unlock(3),   and
       pthread_spin_destroy()  on copies of the object referred to by lock is undefined.

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

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

ОШИБКИ

       Функция pthread_spin_init() может завершаться со следующими ошибками:

       EAGAIN В системе не хватает ресурсов для инициализации новой циклической блокировки.

       ENOMEM Недостаточно памяти для инициализации циклической блокировки.

ВЕРСИИ

       These functions were added in glibc 2.2.

СТАНДАРТЫ

       POSIX.1-2001.

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

ЗАМЕЧАНИЯ

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

       Если нити создают ситуацию взаимной блокировки при работе с циклическими блокировками, то эти нити  будут
       ждать блокировку бесконечно потребляя время ЦП.

       Циклические  блокировки  пользовательского  пространства  не  применяются  в качестве обычного решения по
       блокировкам. Они, по определению, подвержены смене  приоритетов  и  неограниченны  по  времени  ожидания.
       Программист,  использующий  циклические  блокировки,  должен  быть исключительно осмотрителен не только с
       кодом, но и с настройкой системы, размещением нити и назначением приоритета.

СМ. ТАКЖЕ

       pthread_mutex_init(3), pthread_mutex_lock(3), pthread_spin_lock(3), pthread_spin_unlock(3), pthreads(7)

ПЕРЕВОД

       Русский перевод этой страницы руководства был сделан Alexey, Azamat Hackimov <azamat.hackimov@gmail.com>,
       kogamatranslator49 <r.podarov@yandex.ru>, Kogan, Max Is <ismax799@gmail.com>, Yuri Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо
       на man-pages-ru-talks@lists.sourceforge.net.

Linux man-pages 6.03                            4 декабря 2022 г.                           pthread_spin_init(3)