Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Библиотека потоков POSIX (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 Недостаточно памяти для инициализации циклической блокировки.

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       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>, Darima Kogan
       <silverdk99@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов
       <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                             pthread_spin_init(3)