Rozważmy przypadek gdy na czas tej procedury wyłączone zostaną przerwania.
void scheduler()
{
disable_interrupts();
struct task *new = select_runnable_task(run_queue);
current->state = RUNNABLE;
new->state = RUNNING;
current = new;
switch_to(new);
restore_interrupts();
}
Rozwiązanie jest poprawne dla maszyny jednoprocesorowej. Przerwania są blokowane dla obecnego zadania (dla obecnego procesora). W systemie wieloprocesorowym blokowanie przerwań nie gwarantuje wyłącznego dostępu. Dla maszyny wieloprocesorowej może się zdarzyć, że na dwóch procesorach zostanie wybrane to samo zadanie.