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).