|
|
|
@ -165,12 +165,12 @@ bool GlobalScheduler::YieldThreadAndBalanceLoad(Thread* yielding_thread) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
if (next_thread->GetLastRunningTicks() >= thread->GetLastRunningTicks() || |
|
|
|
next_thread->GetPriority() < thread->GetPriority()) { |
|
|
|
if (thread->GetPriority() <= priority) { |
|
|
|
winner = thread; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (next_thread->GetLastRunningTicks() >= thread->GetLastRunningTicks() || |
|
|
|
next_thread->GetPriority() < thread->GetPriority()) { |
|
|
|
if (thread->GetPriority() <= priority) { |
|
|
|
winner = thread; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -240,7 +240,7 @@ bool GlobalScheduler::YieldThreadAndWaitForLoadBalancing(Thread* yielding_thread |
|
|
|
|
|
|
|
void GlobalScheduler::PreemptThreads() { |
|
|
|
for (std::size_t core_id = 0; core_id < NUM_CPU_CORES; core_id++) { |
|
|
|
const u64 priority = preemption_priorities[core_id]; |
|
|
|
const u32 priority = preemption_priorities[core_id]; |
|
|
|
if (scheduled_queue[core_id].size(priority) > 1) { |
|
|
|
scheduled_queue[core_id].yield(priority); |
|
|
|
reselection_pending.store(true, std::memory_order_release); |
|
|
|
|