Procedura scheduler (spinlock)

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