.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2017, Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH pthread_spin_init 3 "30 марта 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ pthread_spin_init, pthread_spin_destroy \- инициализирует или уничтожает циклическую блокировку .SH LIBRARY POSIX threads library (\fIlibpthread\fP, \fI\-lpthread\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint pthread_spin_init(pthread_spinlock_t *\fP\fIlock\fP\fB, int \fP\fIpshared\fP\fB);\fP \fBint pthread_spin_destroy(pthread_spinlock_t *\fP\fIlock\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP \fBpthread_spin_init\fP(), \fBpthread_spin_destroy\fP(): .nf _POSIX_C_SOURCE >= 200112L .fi .SH ОПИСАНИЕ \fIОбщее замечание\fP: Большинству программ достаточно использования мьютексов, а не циклических блокировок. В основном, циклические блокировки полезны при применении алгоритмов планирования реального времени. Смотрите ЗАМЕЧАНИЯ. .PP Функция \fBpthread_spin_init\fP() выделяет ресурсы, требуемые для работы циклической блокировки, на которую указывает \fIlock\fP, и инициализирует блокировку в неблокированном состоянии. В аргументе \fIpshared\fP должно быть одно из следующих значений: .TP \fBPTHREAD_PROCESS_PRIVATE\fP Циклическая блокировка будет использоваться только нитями одного процесса, которому принадлежит вызвавшая \fBpthread_spin_init\fP() нить (попытка использования такой циклической блокировки между процессами приводит к непредсказуемому поведению). .TP \fBPTHREAD_PROCESS_SHARED\fP Циклическая блокировка может использоваться любой нитью любого процесса, который имеет доступ к памяти, содержащей блокировку (т. е., блокировка может находиться в объекте общей памяти, который используется несколькими процессами). .PP Вызов \fBpthread_spin_init\fP() с уже инициализированной циклической блокировкой приводит к непредсказуемому поведению. .PP Функция \fBpthread_spin_destroy\fP() уничтожает ранее инициализированную циклическую блокировку, освобождая все выделенные ей ресурсы. Уничтожение ещё не инициализированной циклической блокировки или уничтожение циклической блокировки, которая захвачена другой нитью,приводит к непредсказуемым результатам. .PP После того, как циклическая блокировка уничтожена, выполнение с ней любой операции кроме инициализации \fBpthread_spin_init\fP() приводит к непредсказуемому поведению. .PP The result of performing operations such as \fBpthread_spin_lock\fP(3), \fBpthread_spin_unlock\fP(3), and \fBpthread_spin_destroy\fP() on \fIcopies\fP of the object referred to by \fIlock\fP is undefined. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении эти функции возвращают ноль. При ошибке возвращается номер ошибки. Если ошибкой завершается \fBpthread_spin_init\fP(), то инициализация блокировки не происходит. .SH ОШИБКИ .\" These errors don't occur on the glibc implementation Функция \fBpthread_spin_init\fP() может завершаться со следующими ошибками: .TP \fBEAGAIN\fP В системе не хватает ресурсов для инициализации новой циклической блокировки. .TP \fBENOMEM\fP Недостаточно памяти для инициализации циклической блокировки. .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ glibc 2.2. POSIX.1\-2001. .PP Поддержка общих для процессов циклических блокировок указана в POSIX. Она поддерживается реализацией glibc. .SH ЗАМЕЧАНИЯ Циклические блокировки должны использоваться вместе с алгоритмами выполнения реального времени (\fBSCHED_FIFO\fP или, возможно, \fBSCHED_RR\fP). Использование циклических блокировок с недерминированными алгоритмами планирования, такими как \fBSCHED_OTHER\fP, вероятно, указывают на ошибки при проектировании. Проблема в том, что если нить, выполняющаяся по такому алгоритму, вытеснится с ЦП в момент когда она удерживает циклическую блокировку, остальные нити будут впустую тратить время на ожидание блокировки, пока держатель не будет запланирован к выполнению и не освободит блокировку. .PP Если нити создают ситуацию взаимной блокировки при работе с циклическими блокировками, то эти нити будут ждать блокировку бесконечно потребляя время ЦП. .PP .\" FIXME . When PTHREAD_MUTEX_ADAPTIVE_NP is one day document .\" make reference to it here Циклические блокировки пользовательского пространства \fIне\fP применяются в качестве обычного решения по блокировкам. Они, по определению, подвержены смене приоритетов и неограниченны по времени ожидания. Программист, использующий циклические блокировки, должен быть исключительно осмотрителен не только с кодом, но и с настройкой системы, размещением нити и назначением приоритета. .SH "СМ. ТАКЖЕ" .ad l .nh \fBpthread_mutex_init\fP(3), \fBpthread_mutex_lock\fP(3), \fBpthread_spin_lock\fP(3), \fBpthread_spin_unlock\fP(3), \fBpthreads\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexey, Azamat Hackimov , kogamatranslator49 , Kogan, Max Is , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .