В идеале, когда унаследованный уровень приоритета
понизится, это будет сделано пошагово. Как каждый
зависимость, вызвавшая повышение уровня приоритета, удаляется,
унаследованный уровень приоритета должен опуститься до уровня приоритета
самая высокая оставшаяся зависимость.
Например:
задание A (от 100 до 80) имеет два мьютекса (X & Y)
что задачи B (pri 90) и C (pri 80) соответственно ожидают выполнения
за. Когда задача A передает мьютекс Y задаче C, можно ожидать, что ее
Приоритет упадет до 90. Когда он, наконец, откажется от мьютекса X для задачи B,
мы ожидаем, что уровень приоритета упадет до 100.
Приоритетное наследование не работает в VxWorks.
Как это работает, зависит от используемой версии VxWorks.
pre-VxWorks 6.0
Уровень приоритета остается «повышенным» до тех пор, пока
блокировка на семействе мьютексов отказывается от своего последнего инверсионно-безопасного мьютекса
семафор.
Используя приведенный выше пример, когда задача A отказывается от мьютекса Y
для задачи C ее приоритет остается равным 80. После того, как он откажется от мьютекса X для
Задача B, тогда ее приоритет снизится до 100 (пропуская 90).
Давайте добавим кривая мяч № 1 в микс. Что если у задачи А была блокировка мьютекса
Z, пока все это происходило, но никто не ожидал Z? В этом
В этом случае уровень приоритета останется на уровне 80, пока не будет отказано в Z - тогда
оно упадет до 100.
Почему так?
Это просто, и в большинстве случаев это хорошо
довольно. Тем не менее, это означает, что когда «кривая шар № 1» вступает в
играть, приоритет будет оставаться выше в течение более длительного периода времени, чем
необходимо.
VxWorks 6.0 +
Уровень приоритета сейчас
остается активным до тех пор, пока не будет заблокирована мьютекс
Семафор отказывается от своего последнего безопасного мьютекса инверсии , который способствовал
повышение уровня приоритета .
Это улучшение позволяет избежать проблемы
"Кривой мяч № 1". У него есть свои ограничения. Например, если
время ожидания задачи B и / или задачи C в ожидании отказа от задачи A
семафоры, уровень приоритета задачи A не пересчитывается
пока он не откажется от семафора.