Операционные системы. Замятин А.В - 63 стр.

UptoLike

Составители: 

63
Функция pthread_mutex_init возвращает 0 после успешного завер-
шения или другое значение, если произошла ошибка. Пример использо-
вания функции pthread_mutexattr_init:
#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_setpshared
(&mattr, PTHREAD_PROCESS_SHARED);
/* инициализация мьютекса произвольными значениями */
ret = pthread_mutex_init(&mp, &mattr);
Запирание (захват) мьютекса
Функция pthread_mute_lock используется для запирания или захва-
та мьютекса. Аргументом функции является адрес запираемого мьютек-
са. Если мьютекс уже заперт, вызывающий поток блокируется и мью-
текс ставится в очередь приоритетов. Когда происходит возврат из
pthread_mute_lock, мьютекс запирается, а вызывающий поток становит-
ся его владельцем. Функция pthread_mute_lock возвращает 0 после ус-
пешного завершения, или другое значение, если произошла ошибка.
Пример вызова:
#include <pthread.h>
pthread_mutex_t mp;
int ret;
ret = pthread_mutex_lock(&mp);