next up previous contents
Next: Запирание мьютекса Up: Синхронизация потоков Previous: Область видимости мьютекса   Contents

Инициализация мьютекса

Функция pthread_mutex_init() предназначена для инициализации мьютекса:

int pthread_mutex_init(pthread_mutex_t *mp,

    const pthread_mutexattr_t *mattr);

Здесь мьютекс, указанный mp, инициализируется значением по умолчанию, если mattr равен NULL, или определенными атрибутами, которые уже установлены с помощью pthread_mutexattr_init().

Блокировка через мьютекс не должна повторно инициализироваться или удаляться, пока другие потоки могут его использовать. Если мьютекс инициализируется повторно или удаляется, приложение должно убедиться, что в настоящее время этот мьютекс не используется; pthread_mutex_init() возвращает 0 - после успешного завершения - или другое значение, если произошла ошибка. Пример вызова:

#include <pthread.h>

pthread_mutex_t mp = PTHREAD_MUTEX_INITIALIZER; 

pthread_mutexattr_t mattr; 

int ret; 

/* инициализация мьютекса значением по умолчанию */ 

ret = pthread_mutex_init(&mp, NULL);

Когда мьютекс инициализируется, он находится в открытом состоянии. Статически определенные мьютексы могут инициализироваться непосредственно значениями по умолчанию с помощью макроса PTHREAD_MUTEX_INITIALIZER. Пример инициализации:

/* инициализация атрибутов мьютекса по умолчанию*/ 

ret = pthread_mutexattr_init(&mattr);

/* смена значений mattr с помощью функций */

ret = pthread_mutexattr_*();

/* инициализация мьютекса произвольными значениями */

ret = pthread_mutex_init(&mp, &mattr);



2004-06-22