pthread_mutex_init()

Инициализировать мьютекс

Прототип:

#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int pthread_mutex_init( pthread_mutex_t *mutex,
const pthread_mutexattr_t *attr );

Аргументы:

mutex
Указатель на объект pthread_mutex_t, который необходимо инициализировать.
attr
NULL, или указатель на объект pthread_mutexattr_t, который указывает атрибуты, которые требуется использовать для мьютекса. Для получения дополнительной информации см. pthread_mutexattr_init().

Библиотека:

libc

Описание:

Функция pthread_mutex_init() инициализирует мьютекс, используя атрибуты, указанные объектом атрибутов мьютекса attr. Если attr равен NULL, то мьютекс инициализируется с атрибутами по умолчанию (см. pthread_mutexattr_init()). После инициализации мьютекс находится в разблокированном состоянии.


Caution: Необходимо выделять объекты синхронизации только в обычной памяти. На некоторых процессорах (например, на некоторых PPC) атомарные операции, такие как вызовы pthread_mutex_lock(), приведут к возникновению ошибки, если управляющая структура размещена в некэшированной памяти.

Можно инициализировать статически выделенный мьютекс с атрибутами по умолчанию, назначив ему макрос PTHREAD_MUTEX_INITIALIZER или PTHREAD_RMUTEX_INITIALIZER (для рекурсивных мьютексов).


Note: Чтобы уничтожить мьютекс, следует вызвать pthread_mutex_destroy(). После уничтожения мьютекса, не допускается его использование без повторной инициализации с помощью вызова pthread_mutex_init().

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

EOK
Успешное завершение.
EAGAIN
Все объекты синхронизации ядра в данный момент используются.
EBUSY
Данный мьютекс ранее был инициализирован и не был уничтожен.
EFAULT
Произошла ошибка при попытке ядра получить доступ mutex или attr.
EINVAL
Некорректное значение attr.

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

POSIX 1003.1 Threads

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

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

pthread_mutexattr_init(), pthread_mutex_destroy(), SyncTypeCreate()




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