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

UptoLike

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

226
ток-владелец, находящийся в начале очереди, не блокирован. Функция
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);
Захват через мьютекс не должен повторно инициализироваться или
удаляться, пока другие потоки могут его использовать. Если мьютекс
инициализируется повторно или удаляется, приложение должно убе-
диться, что в настоящее время этот мьютекс не используется.
8.3.6 Удаление мьютекса
Функция pthread_mutex_destroy используется для удаления мьютек-
са в любом состоянии. Функция pthread_mutex_destroy возвращает 0 по-
сле успешного завершения или другое значение, если произошла ошиб-
ка. Пример вызова:
#include <pthread.h>
pthread_mutex_t mp;
int ret;
ret = pthread_mutex_destroy(&mp);
Иерархия блокировок
Иногда может возникнуть необходимость одновременного доступа
к нескольким ресурсам. При этом возникает проблема, заключающаяся в