Слайд 2pthread_mutexattr_t
#include
int pthread_mutexattr_init(
pthread_mutexattr_t * attr);
int pthread_mutexattr_destroy(
pthread_mutexattr_t *attr);
Слайд 3Использование
#include
int pthread_mutex_init(
pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
Или
pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER;
int pthread_mutex_destroy(pthread_mutex_t
*mutex);
Слайд 4Операции над pthread_mutexattr_t
pthread_mutexattr_get/settype
pthread_mutexattr_get/setpshared
pthread_mutexattr_get/setprotocol
pthread_mutexattr_get/setprioceiling
pthread_mutexattr_get/setrobust_np
Слайд 5pthread_mutexattr_get/settype
#include
int pthread_mutexattr_gettype(
pthread_mutexattr_t *restrict attr,
int *restrict type);
int pthread_mutexattr_settype(
pthread_mutexattr_t *_attr,
int type);
Слайд 6Типы
PTHREAD_MUTEX_NORMAL
PTHREAD_MUTEX_ERRORCHECK
PTHREAD_MUTEX_RECURSIVE
PTHREAD_MUTEX_DEFAULT
Слайд 7pthread_mutexattr_get/setpshared
#include
int pthread_mutexattr_getpshared(
const pthread_mutexattr_t *restrict attr,
int *restrict pshared);
int pthread_mutexattr_setpshared(
pthread_mutexattr_t * attr,
int
pshared);
PTHREAD_PROCESS_SHARED
PTHREAD_PROCESS_PRIVATE
Слайд 8pthread_mutexattr_get/setrobust_np
#include
int pthread_mutexattr_getrobust_np(
const pthread_mutexattr_t *attr,
int *robustness);
int pthread_mutexattr_setrobust_np(
pthread_mutexattr_t *attr,
int robustness);
Слайд 9Robustness
PTHREAD_MUTEX_ROBUST_NP
PTHREAD_MUTEX_STALLED_NP
Слайд 10Что означает ROBUST
Если процесс, удерживающий мутекс, умер, ресурс, защищенный этим мутексом, остается
в несогласованном состоянии
Попытки его захватить возвращают EOWNERDEAD
Если ресурс удалось восстановить, следует вызвать функцию pthread_mutex_consistent_np
Слайд 11pthread_mutex_consistent_np
int pthread_mutex_consistent_np(
pthread_mutex_t *mutex);
Слайд 12pthread_mutexattr_get/setprotocol
#include
int pthread_mutexattr_getprotocol(
const pthread_mutexattr_t *restrict attr,
int *restrict protocol);
int pthread_mutexattr_setprotocol(
pthread_mutexattr_t *attr,
int
protocol);
Слайд 13Протоколы
PTHREAD_PRIO_NONE,
PTHREAD_PRIO_INHERIT,
PTHREAD_PRIO_PROTECT
Слайд 14Инверсия приоритета
INHERIT – наследование приоритета
Нить, удерживающая мутекс, исполняется с приоритетом, наивысшим среди
всех нитей, ждущих этого мутекса (включая себя)
Слайд 15Инверсия приоритета
PROTECT – потолок приоритета (priority ceiling)
Нить, удерживающая мутекс, исполняется с наивысшим
приоритетом из всех нитей, которые могут удерживать этот мутекс.