X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftests%2Fthreads%2Fpriority-donate-nest.c;h=3a3a9a590a2b677031524ad351f6e20e88216b8d;hb=3edcfedb8e62970f3293fa676b6691f8658c3c11;hp=a7b919c90b276cf049bdab81598687e40a11f4e6;hpb=f2bc7b1760b7257089e2007755f9e53a47d7067a;p=pintos-anon diff --git a/src/tests/threads/priority-donate-nest.c b/src/tests/threads/priority-donate-nest.c index a7b919c..3a3a9a5 100644 --- a/src/tests/threads/priority-donate-nest.c +++ b/src/tests/threads/priority-donate-nest.c @@ -1,5 +1,9 @@ -/* Problem 1-3: Priority Scheduling tests. - +/* Low-priority main thread L acquires lock A. Medium-priority + thread M then acquires lock B then blocks on acquiring lock A. + High-priority thread H then blocks on acquiring lock B. Thus, + thread H donates its priority to M, which in turn donates it + to thread L. + Based on a test originally submitted for Stanford's CS 140 in winter 1999 by Matt Franklin , Greg Hutchins , Yu Ping Hu @@ -27,7 +31,7 @@ test_priority_donate_nest (void) struct locks locks; /* This test does not work with the MLFQS. */ - ASSERT (!enable_mlfqs); + ASSERT (!thread_mlfqs); /* Make sure our priority is the default. */ ASSERT (thread_get_priority () == PRI_DEFAULT); @@ -39,15 +43,15 @@ test_priority_donate_nest (void) locks.a = &a; locks.b = &b; - thread_create ("medium", PRI_DEFAULT - 1, medium_thread_func, &locks); + thread_create ("medium", PRI_DEFAULT + 1, medium_thread_func, &locks); thread_yield (); msg ("Low thread should have priority %d. Actual priority: %d.", - PRI_DEFAULT - 1, thread_get_priority ()); + PRI_DEFAULT + 1, thread_get_priority ()); - thread_create ("high", PRI_DEFAULT - 2, high_thread_func, &b); + thread_create ("high", PRI_DEFAULT + 2, high_thread_func, &b); thread_yield (); msg ("Low thread should have priority %d. Actual priority: %d.", - PRI_DEFAULT - 2, thread_get_priority ()); + PRI_DEFAULT + 2, thread_get_priority ()); lock_release (&a); thread_yield (); @@ -65,7 +69,7 @@ medium_thread_func (void *locks_) lock_acquire (locks->a); msg ("Medium thread should have priority %d. Actual priority: %d.", - PRI_DEFAULT - 2, thread_get_priority ()); + PRI_DEFAULT + 2, thread_get_priority ()); msg ("Medium thread got the lock."); lock_release (locks->a);