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