yield a little more politely

This commit is contained in:
David Rose 2009-01-23 20:16:57 +00:00
parent e4b210d607
commit 1020b07b1e

View File

@ -514,15 +514,13 @@ choose_next_context() {
if (_ready.empty() && _next_ready.empty()) { if (_ready.empty() && _next_ready.empty()) {
// All of our threads are currently sleeping. Therefore, wake // All of our threads are currently sleeping. Therefore, wake
// the volunteer(s) immediately. // the volunteer(s) immediately.
if (!_volunteers.empty()) {
wake_all_sleepers(_volunteers); wake_all_sleepers(_volunteers);
} else { // We should also yield the whole process now, to be polite to
// No volunteers. Sleep the whole process. // the rest of the system.
system_yield(); system_yield();
now = get_current_time(); now = get_current_time();
} }
}
wake_sleepers(_sleeping, now); wake_sleepers(_sleeping, now);
wake_sleepers(_volunteers, now); wake_sleepers(_volunteers, now);
} }
@ -560,6 +558,10 @@ choose_next_context() {
thread_cat.debug() thread_cat.debug()
<< "Waking volunteers.\n"; << "Waking volunteers.\n";
} }
// We should yield the whole process now, to be polite to the
// rest of the system.
system_yield();
now = get_current_time();
wake_all_sleepers(_volunteers); wake_all_sleepers(_volunteers);
wake_sleepers(_sleeping, now); wake_sleepers(_sleeping, now);