Слайд 2pthread_mutexattr_t
#include
int pthread_mutexattr_init(
pthread_mutexattr_t * attr);
int pthread_mutexattr_destroy(
pthread_mutexattr_t *attr);
![pthread_mutexattr_t #include int pthread_mutexattr_init( pthread_mutexattr_t * attr); int pthread_mutexattr_destroy( pthread_mutexattr_t *attr);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-1.jpg)
Слайд 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
![Использование #include int pthread_mutex_init( pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); Или](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-2.jpg)
*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
![Операции над pthread_mutexattr_t pthread_mutexattr_get/settype pthread_mutexattr_get/setpshared pthread_mutexattr_get/setprotocol pthread_mutexattr_get/setprioceiling pthread_mutexattr_get/setrobust_np](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-3.jpg)
Слайд 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);
![pthread_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);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-4.jpg)
Слайд 6Типы
PTHREAD_MUTEX_NORMAL
PTHREAD_MUTEX_ERRORCHECK
PTHREAD_MUTEX_RECURSIVE
PTHREAD_MUTEX_DEFAULT
![Типы PTHREAD_MUTEX_NORMAL PTHREAD_MUTEX_ERRORCHECK PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_DEFAULT](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-5.jpg)
Слайд 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
![pthread_mutexattr_get/setpshared #include int pthread_mutexattr_getpshared( const pthread_mutexattr_t *restrict attr, int *restrict pshared); int](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-6.jpg)
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);
![pthread_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);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-7.jpg)
Слайд 9Robustness
PTHREAD_MUTEX_ROBUST_NP
PTHREAD_MUTEX_STALLED_NP
![Robustness PTHREAD_MUTEX_ROBUST_NP PTHREAD_MUTEX_STALLED_NP](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-8.jpg)
Слайд 10Что означает ROBUST
Если процесс, удерживающий мутекс, умер, ресурс, защищенный этим мутексом, остается
![Что означает ROBUST Если процесс, удерживающий мутекс, умер, ресурс, защищенный этим мутексом,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-9.jpg)
в несогласованном состоянии
Попытки его захватить возвращают EOWNERDEAD
Если ресурс удалось восстановить, следует вызвать функцию pthread_mutex_consistent_np
Слайд 11pthread_mutex_consistent_np
int pthread_mutex_consistent_np(
pthread_mutex_t *mutex);
![pthread_mutex_consistent_np int pthread_mutex_consistent_np( pthread_mutex_t *mutex);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-10.jpg)
Слайд 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
![pthread_mutexattr_get/setprotocol #include int pthread_mutexattr_getprotocol( const pthread_mutexattr_t *restrict attr, int *restrict protocol); int](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-11.jpg)
protocol);
Слайд 13Протоколы
PTHREAD_PRIO_NONE,
PTHREAD_PRIO_INHERIT,
PTHREAD_PRIO_PROTECT
![Протоколы PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT, PTHREAD_PRIO_PROTECT](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-12.jpg)
Слайд 14Инверсия приоритета
INHERIT – наследование приоритета
Нить, удерживающая мутекс, исполняется с приоритетом, наивысшим среди
![Инверсия приоритета INHERIT – наследование приоритета Нить, удерживающая мутекс, исполняется с приоритетом,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-13.jpg)
всех нитей, ждущих этого мутекса (включая себя)
Слайд 15Инверсия приоритета
PROTECT – потолок приоритета (priority ceiling)
Нить, удерживающая мутекс, исполняется с наивысшим
![Инверсия приоритета PROTECT – потолок приоритета (priority ceiling) Нить, удерживающая мутекс, исполняется](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/415841/slide-14.jpg)
приоритетом из всех нитей, которые могут удерживать этот мутекс.