pthread_mutexattr_gettype()

Получить тип мьютекса

Прототип:

#include <pthread.h>
int pthread_mutexattr_gettype( const pthread_mutexattr_t *attr,
int *type );

Аргументы:

attr
Указатель на объект pthread_mutexattr_t, из которого требуется получить атрибут.
type
Указатель на область памяти, где функция может хранить тип.

Библиотека:

libc

Описание:

Функция pthread_mutexattr_gettype() получает тип мьютекса из объекта атрибутов мьютекса attr и сохраняет его в type. К допустимым типам мьютексов относятся:

PTHREAD_MUTEX_NORMAL
Мьютекс без обнаружения взаимоблокировок. Поток, который пытается повторно заблокировать этот мьютекс без его предварительного разблокирования, блокируется. Попытки разблокировать мьютекс, заблокированный другим потоком, или попытки разблокировать уже разблокированный мьютекс приводят к неопределенному поведению.
PTHREAD_MUTEX_ERRORCHECK
Мьютекс с обеспечением проверки ошибок. Поток возвращается с ошибкой, когда он пытается:
PTHREAD_MUTEX_RECURSIVE
Поток, который пытается повторно заблокировать этот мьютекс без его предварительного разблокирования, успешно блокирует мьютекс. Взаимная блокировка, которая может возникнуть с мьютексами типа PTHREAD_MUTEX_NORMAL, не может возникнуть с этим типом мьютексов. Множественные блокировки этого мьютекса требуют одинакового количества разблокировок, чтобы освободить мьютекс, прежде чем другой поток сможет захватить мьютекс. Поток, который пытается разблокировать мьютекс, заблокированный другим потоком, или разблокировать уже разблокированный мьютекс, возвращается с ошибкой.
PTHREAD_MUTEX_DEFAULT
Значение по умолчанию атрибута type. Попытки рекурсивно заблокировать мьютекс этого типа или разблокировать мьютекс этого типа, который не заблокирован вызывающим потоком, или разблокировать мьютекс этого типа, который не заблокирован, приводят к неопределенному поведению.

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

EOK
Успешное завершение.
EINVAL
Некорректный объект атрибутов мьютекса attr.

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

POSIX 1003.1 XSI

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

Предостережения:

Приложение не должно использовать мьютекс PTHREAD_MUTEX_RECURSIVE с условными переменными, потому что неявная разблокировка, выполненная для pthread_cond_wait() или pthread_cond_timedwait() может фактически не освобождать мьютекс (если он был заблокирован несколько раз). Если это произойдет, никакой другой поток не сможет удовлетворить условию.

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

pthread_cond_timedwait(), pthread_cond_wait(), pthread_cond_wait_interruptible(), pthread_mutexattr_settype()




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