ИМЯ
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_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 <[email protected]>, kogamatranslator49 <[email protected]>, Kogan, Max Is <[email protected]>, Yuri Kozlov <[email protected]> и Иван Павлов <[email protected]> Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на [email protected]4 декабря 2022 г. | Linux man-pages 6.03 |