Procedura scheduler (interrupts)

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.