pthread_mutexattr_settype()

Задать тип мьютекса

Прототип:

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

Аргументы:

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

Библиотека:

libc

Описание:

Функция pthread_mutexattr_settype() устанавливает тип мьютекса в объекте атрибутов мьютекса attr на значение, заданное в type.

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

EOK
Успешное завершение.
EINVAL
Некорректное значение attr или type.

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

POSIX 1003.1 X/Open Systems Interfaces Extension

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

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

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

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

pthread_cond_timedwait(), pthread_cond_wait(), pthread_cond_wait_interruptible(), pthread_mutexattr_gettype()




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