pthread_rwlock_rdlock()

Предоставить доступ по чтению всем потокам, которые его запрашивают

Прототип:

#include <pthread.h>
int pthread_rwlock_rdlock( pthread_rwlock_t *rwl );

Аргументы:

rwl
Указатель на объект pthread_rwlock_t, который требуется заблокировать для чтения.

Библиотека:

libc

Описание:

Функция pthread_rwlock_rdlock() получает общую блокировку на блокировку чтения-записи rwl. Если блокировка чтения-записи уже заблокирована, вызывающий поток блокируется до тех пор, пока исключительная блокировка не будет снята.


Note: Если другой поток в данный момент ожидает получения блокировки чтения-записи для записи, pthread_rwlock_rdlock() блокируется. Это может привести к взаимной блокировке, если поток пытается рекурсивно получить блокировку для чтения, в то время как другой поток пытается получить блокировку для записи.

Если сигнал доставлен в поток, ожидающий блокировки блокировки чтения-записи, он возобновит ожидание блокировки после возврата из обработчика сигнала.

Поток может удерживать несколько блокировок чтения на одной и той же блокировке чтения-записи; он должен вызвать pthread_rwlock_unlock() несколько раз, чтобы снять блокировку чтения.

Возвращаемое значение:

EOK
Успешное завершение.
EAGAIN
При первом использовании статически инициализированной блокировки чтения-записи системных ресурсов было недостаточно для инициализации блокировки чтения-записи.
EDEADLK
Вызывающий поток уже имеет исключительную блокировку для rwl.
EFAULT
Произошла ошибка при попытке ядра получить доступ к rwl.
EINVAL
Блокировка чтения-записи rwl некорректна.

Классификация:

POSIX 1003.1 THR

Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

pthread_rwlock_destroy(), pthread_rwlock_init(), pthread_rwlock_tryrdlock(), pthread_rwlock_trywrlock(), pthread_rwlock_unlock(), pthread_rwlock_wrlock()




Предыдущий раздел: Описание API системной библиотеки