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

НАИМЕНОВАНИЕ
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)