这是我不确定是否会出现问题的情况。
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 更改为更低或更高的优先级值,那该怎么办。这种情况是否有任何排列会导致意外行为?