Зачем мне нужно SEM_PRIORITY_Q при использовании инверсии безопасного мьютекса VxWorks? - PullRequest
0 голосов
/ 20 сентября 2008

В VxWorks я создаю мьютекс с опцией SEM_INVERSION_SAFE для защиты от проблемы инверсии приоритетов.
В руководстве сказано, что я должен также использовать опцию SEM_PRIORITY_Q. Почему это так?

1 Ответ

3 голосов
/ 20 сентября 2008

При создании семафора мьютекса в VxWroks у вас есть два варианта работы с несколькими задачами, находящимися в очереди (ожидающими) семафора: сначала FIFO или задача с наивысшим приоритетом.

Когда вы используете опцию SEM_INVERSION_SAFE, задача с мьютексом будет увеличена до того же приоритета, что и задача с наивысшим приоритетом, ожидающая семафор.

Если бы вы использовали очередь FIFO для семафора, ядру пришлось бы пройти очередь задач, ожидающих, когда мьютекс найдет ту, которая имеет наивысший приоритет. Эта операция не является детерминированной, поскольку время прохождения очереди изменяется по мере изменения числа задач в очереди.

Когда вы используете опцию SEM_PRIORITY_Q, ядру просто нужно посмотреть на задачу в начале очереди, так как это самый высокий приоритет. Это операция с постоянным временем.

...