X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=grading%2Fthreads%2Fpriority-donate-one.c;h=afc1e830ffb07d2d14d734e0081552509a927aae;hb=5780c9f434cca090f88463b7f0199d49b4ded288;hp=e6382bdf9c911fd3786b0d0a49cbea6c5aa1fa9a;hpb=86cdc01ec35a5477ac244caba910ce54b847a945;p=pintos-anon diff --git a/grading/threads/priority-donate-one.c b/grading/threads/priority-donate-one.c index e6382bd..afc1e83 100644 --- a/grading/threads/priority-donate-one.c +++ b/grading/threads/priority-donate-one.c @@ -6,10 +6,6 @@ , Yu Ping Hu . Modified by arens. */ -#ifdef MLFQS -#error This test not applicable with MLFQS enabled. -#endif - #include "threads/test.h" #include #include "threads/synch.h" @@ -20,13 +16,17 @@ static void test_donate_return (void); void test (void) { + /* This test does not work with the MLFQS. */ + ASSERT (!enable_mlfqs); + /* Make sure our priority is the default. */ ASSERT (thread_get_priority () == PRI_DEFAULT); test_donate_return (); } -static thread_func acquire_thread_func; +static thread_func acquire1_thread_func; +static thread_func acquire2_thread_func; static void test_donate_return (void) @@ -39,25 +39,36 @@ test_donate_return (void) lock_init (&lock, "donor"); lock_acquire (&lock); - thread_create ("acquire1", PRI_DEFAULT + 1, acquire_thread_func, &lock); + thread_create ("acquire1", PRI_DEFAULT + 1, acquire1_thread_func, &lock); printf ("This thread should have priority %d. Actual priority: %d.\n", PRI_DEFAULT + 1, thread_get_priority ()); - thread_create ("acquire2", PRI_DEFAULT + 2, acquire_thread_func, &lock); + thread_create ("acquire2", PRI_DEFAULT + 2, acquire2_thread_func, &lock); printf ("This thread should have priority %d. Actual priority: %d.\n", PRI_DEFAULT + 2, thread_get_priority ()); lock_release (&lock); - printf ("acquire2 and acquire1 must already have finished, in that order.\n" + printf ("acquire2, acquire1 must already have finished, in that order.\n" "This should be the last line before finishing this test.\n" "Priority donation test done.\n"); } static void -acquire_thread_func (void *lock_) +acquire1_thread_func (void *lock_) +{ + struct lock *lock = lock_; + + lock_acquire (lock); + printf ("acquire1: got the lock\n"); + lock_release (lock); + printf ("acquire1: done\n"); +} + +static void +acquire2_thread_func (void *lock_) { struct lock *lock = lock_; lock_acquire (lock); - printf ("%s: got the lock\n", thread_name ()); + printf ("acquire2: got the lock\n"); lock_release (lock); - printf ("%s: done\n", thread_name ()); + printf ("acquire2: done\n"); }