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

UptoLike

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

64
Для открытия (раблокировки) мьютекса используется функция
pthread_mutex_unlock. При этом мьютекс должен быть закрыт, а вызы-
вающий поток должен быть владельцем мьютекса, то есть тем, кто его
запирал. Пока любые другие потоки ждут доступа к мьютексу, его по-
ток-владелец, находящийся в начале очереди, не блокирован. Функция
pthread_mutex_unlock возвращает 0 после успешного завершения или
другое значение, если произошла ошибка. Пример вызова:
#include <pthread.h>
pthread_mutex_t mp;
int ret;
ret = pthread_mutex_unlock(&mp);
Существует способ захвата мьютекса без блокирования потока.
Функция pthread_mutex_trylock пытается провести запирание мьютекса.
Она является неблокирующей версией pthread_mutex_lock. Если мью-
текс уже закрыт, вызов возвращает ошибку, однако поток, вызвавший
эту функцию, не блокируется. В противном случае мьютекс закрывает-
ся, а вызывающий процесс становится его владельцем. Функция
pthread_mutex_trylock возвращает 0 после успешного завершения или
другое значение, если произошла ошибка. Пример вызова:
#include <pthread.h>
pthread_mutex_t mp;
int ret;
ret = pthread_ mutex_trylock(&mp);
Захват через мьютекс не должен повторно инициализироваться или
удаляться, пока другие потоки могут его использовать. Если мьютекс
инициализируется повторно или удаляется, приложение должно убе-
диться, что в настоящее время этот мьютекс не используется.
Удаление мьютекса
Функция pthread_mutex_destroy используется для удаления мью-
текса в любом состоянии. Функция pthread_mutex_destroy возвращает 0
после успешного завершения или другое значение, если произошла
ошибка. Пример вызова:
#include <pthread.h>
pthread_mutex_t mp;
int ret;
ret = pthread_mutex_destroy(&mp);