Merge task1/themis/priority-donation into task1/priority-donation #13

Merged
td1223 merged 4 commits from task1/themis/priority-donation into task1/priority-donation 2024-10-23 15:03:08 +00:00
3 changed files with 28 additions and 10 deletions
Showing only changes of commit b0074c80f0 - Show all commits

View File

@@ -220,7 +220,9 @@ donate_priority (struct thread *donee) {
/* Only the sink node of the WFG isn't waiting for a lock and
could be on the ready list. Thus, as its priority changed,
it must be reinserted into the list. */
enum intr_level old_level = intr_disable ();
ready_list_reinsert (donee);
intr_set_level (old_level);
donee = NULL;
}
else

View File

@@ -467,20 +467,18 @@ thread_get_recent_cpu (void)
/* Reinsert thread t into the ready list at its correct position
in descending order of priority. Used when this thread's priority
may have changed. */
may have changed. Must be called with interrupts disabled. */
void
ready_list_reinsert (struct thread *t)
{
enum intr_level old_level = intr_disable ();
ASSERT (intr_get_level () == INTR_OFF);
/* If the thread isn't ready to run, do nothing. */
if (t->status == THREAD_READY)
{
list_remove (&t->elem);
list_insert_ordered (&ready_list, &t->elem, priority_more, NULL);
}
if (t->status != THREAD_READY)
return;
intr_set_level (old_level);
list_remove (&t->elem);
list_insert_ordered (&ready_list, &t->elem, priority_more, NULL);
}
/* Idle thread. Executes when no other thread is ready to run.