mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
59 lines
1.7 KiB
Markdown
59 lines
1.7 KiB
Markdown
Priority Inversion
|
|
==================
|
|
|
|
Scenario: A low priority thread holds a shared resource when a mid priority and a high
|
|
priority thread become runnable. The high priority thread needs exclusive access to the
|
|
resource the low priority one is holding and blocks. This mid priority thread does not
|
|
compete with the other for resources but takes a long to complete. The scheduler must
|
|
prefer the low priority thread over the mid priority thread while it is holding the
|
|
resource the high priority thread is waiting for - otherwise the high priority thread
|
|
effectively waits for the mid priority thread, which is an inversion of priority.
|
|
|
|
Output On Failure
|
|
-----------------
|
|
|
|
```
|
|
main(): This is RIOT! (Version: ...)
|
|
low priority thread has started
|
|
low priority thread started to work on its task
|
|
high priority thread has started
|
|
mid priority thread has started
|
|
mid priority thread started to work on its task
|
|
... this ...
|
|
... takes ...
|
|
... bloody ...
|
|
... ages ...
|
|
... to ...
|
|
... complete ...
|
|
mid priority thread is done
|
|
low priority thread is done
|
|
high priority thread started to work on its task
|
|
high priority thread is done
|
|
==> Priority inversion occurred
|
|
TEST FAILED
|
|
```
|
|
|
|
|
|
Output On Success
|
|
-----------------
|
|
|
|
```
|
|
main(): This is RIOT! (Version: ...)
|
|
low priority thread has started
|
|
low priority thread started to work on its task
|
|
high priority thread has started
|
|
low priority thread is done
|
|
high priority thread started to work on its task
|
|
high priority thread is done
|
|
mid priority thread has started
|
|
mid priority thread started to work on its task
|
|
... this ...
|
|
... takes ...
|
|
... bloody ...
|
|
... ages ...
|
|
... to ...
|
|
... complete ...
|
|
mid priority thread is done
|
|
TEST PASSED
|
|
```
|