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.