При создании мьютекса Posix мы можем указать протокол для работы с приоритетами: PTHREAD_PRIO_NONE
, PTHREAD_PRIO_INHERIT
и PTHREAD_PRIO_PROTECT
.В случае защиты мы также установили верхний предел, который должен находиться в диапазоне для используемого планировщика.
Стандарт не дает четкого представления о том, как эти функции взаимодействуют с потоками в одном и том же процессе, которые имеют разные политики планирования, которыеможет не иметь перекрывающихся диапазонов приоритетов, о чем сообщают sched_get_priority_min()
и sched_get_priority_max()
.Возможно, я не смотрю в нужном месте.
Вопросы:
Есть ли стандартное определение для случая, когда поток получает мьютекс с набором потолков, которыйвне допустимого диапазона для текущей политики планирования потока?
Стандарт говорит, что происходит, когда поток с низким приоритетом с политикой планирования, которая не допускает высоких приоритетов, удерживает мьютекс с PTHREAD_PRIO_INHERIT
, и попытка заблокировать этот мьютекс сделана потоком с политикой планирования и приоритетом, невозможным с политикой потока с низким приоритетом?
Если не существует стандартного определения(или если реализации различаются), что делают реализации?
Я знаю, что поддержание согласованности политик планирования позволяет избежать этих проблем.