Provided by: manpages-ru-dev_4.19.0-7_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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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