diff --git a/src/threads/thread.c b/src/threads/thread.c index f681f92..7366641 100644 --- a/src/threads/thread.c +++ b/src/threads/thread.c @@ -388,6 +388,19 @@ thread_set_priority (int new_priority) return; thread_current ()->priority = new_priority; + + if (new_priority < old_priority && !list_empty (&ready_list)) { + /* If the new priority is lower than the old priority, check if the current + thread no longer has the highest priority. If it doesn't, yield the CPU. + */ + + struct thread *next_thread = + list_entry (list_front (&ready_list), struct thread, elem); + + if (next_thread->priority > new_priority) { + thread_yield(); + } + } } /* Returns the current thread's priority. */