Инициализировать циклическую блокировку
#include <pthread.h>
int pthread_spin_init( pthread_spinlock_t *spinner,
int pshared );
- spinner
- Указатель на объект
pthread_spinlock_t
, который требуется инициализировать.
- pshared
- Значение, которое требуется использовать для межпроцессного атрибута циклической блокировки. Возможные значения:
- PTHREAD_PROCESS_SHARED
- циклическая блокировка может использоваться любым потоком, имеющим доступ к памяти, в которой выделена циклическая блокировка, даже если она выделена в памяти, совместно используемой несколькими процессами.
- PTHREAD_PROCESS_PRIVATE
- с циклической блокировкой могут работать только потоки, созданные в том же процессе, что и поток, инициализировавший циклическую блокировку. Если потоки разных процессов пытаются работать с такой циклической блокировкой, поведение не определено.
libc
Функция pthread_spin_init() выделяет ресурсы, необходимые для циклической блокировки потока spinner, и инициализирует spinner в разблокированном состоянии.
Любой поток, который может получить доступ к памяти, где выделена циклическая блокировка, может работать с циклической блокировкой.
Результат не определен при вызове pthread_spin_init() для уже инициализированной циклической блокировки или при попытке использовать циклическую блокировку, которая не была инициализирована.
Нуль в случае успеха или номер ошибки, указывающий на ошибку.
- EAGAIN
- В системе нет ресурсов, необходимых для инициализации новой циклической блокировки.
- EBUSY
- Циклическая блокировка процесса spinner используется другим потоком и не может быть инициализирована.
- EINVAL
- Некорректный объект
pthread_spinlock_t
spinner. - ENOMEM
- В системе недостаточно свободной памяти для создания новой циклической блокировки.
POSIX 1003.1 Threads, Spin Locks
- Нет
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Да
- В потоке
- Да
pthread_spin_destroy(), pthread_spin_lock(), pthread_spin_trylock(), pthread_spin_unlock()
Предыдущий раздел: Описание API системной библиотеки