Kernel: Implemented priority inheritance for mutexes.
This commit is contained in:
parent
7b9f428b23
commit
9c3419ebcc
3 changed files with 22 additions and 4 deletions
|
@ -56,7 +56,15 @@ SharedPtr<Mutex> Mutex::Create(bool initial_locked, std::string name) {
|
|||
}
|
||||
|
||||
bool Mutex::ShouldWait() {
|
||||
return lock_count > 0 && holding_thread != GetCurrentThread();;
|
||||
auto thread = GetCurrentThread();
|
||||
bool wait = lock_count > 0 && holding_thread != thread;
|
||||
|
||||
// If the holding thread of the mutex is lower priority than this thread, that thread should
|
||||
// temporarily inherit this thread's priority
|
||||
if (wait && thread->current_priority < holding_thread->current_priority)
|
||||
holding_thread->BoostPriority(thread->current_priority);
|
||||
|
||||
return wait;
|
||||
}
|
||||
|
||||
void Mutex::Acquire() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue