-/* 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 <startled@leland.stanford.edu>,
Greg Hutchins <gmh@leland.stanford.edu>, Yu Ping Hu
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 ();
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);