Проблема наследования приоритетов мьютекса FreeRTOS при изменении приоритета задачи - PullRequest
1 голос
/ 13 апреля 2019

Вот сценарий, который, я не уверен, будет проблемой.

Foo()
{
TakeMutex()
//some critical code
GiveMutex()
}

Task A    priority 5
Task B    priority 1

TaskB{ Foo() }
TaskA{ Foo() }

Теперь в какой-то другой задаче он может изменить приоритеты задач A и B. Допустим, что задача B вызывает Foo иберет мьютекс.Теперь, когда у B есть мьютекс, Задача A вызывает foo и пытается взять мьютекс.Из-за наследования приоритетов для мьютекса задача B теперь станет приоритетом задачи A, которая равна 5.

Task A    priority 5
Task B    priority 5 inherited

Now at this moment, some other task attempts to change the priority of Task
B to 8 using vTaskPrioritySet(). 

Task A    priority 5
Task B    priority 8 the set value if even? or does it stay 5 returning 8? 

Вопрос в том, к какому приоритету она вернется после того, как задача B отпустит мьютекс?вернется ли он к своему первоначальному приоритету 1 или сохранит свое установленное значение.Что делать, если вместо этого сценарий был, что Задача A была изменена на более низкий или более высокий приоритет.Есть ли какая-либо перестановка этого сценария, которая может вызвать неожиданное поведение?

...