W systemie wieloprocesorowym do synchronizacji między procesorami można wykorzystać blokady spinlock.
spinlock_t scheduler_lock; void scheduler() { spinlock_lock(&scheduler_lock); struct task *new = select_runnable_task(run_queue); current->state = RUNNABLE; new->state = RUNNING; current = new; switch_to(new); spinlock_unlock(&scheduler_lock); }
W tym rozwiązaniu gdy zadanie zostanie przełączone raz, to drugi raz nie będzie to możliwe (bo poprzednie zadanie nie zwolni scheduler_lock, a do wykonania przełączenia zadania potrzebna jest ta blokada).