Strutture dati necessarie

L'implementazione di un semaforo richiede:

Idea dell'implementazione di wait e signal

procedure wait(sem) {
	if sem.value > 0 {
		sem.value--;
	} else {
		insert PCB in sem.list;
		block_me();
	}
}

procedure signal(sem) {
	if sem.list not empty {
		remove first process from sem.list;
		wake up process;
	} else {
		sem.value++;
	}
}

Implementazione a livello kernel

In un'implementazione dei semafori kernel level:

Implementazione a livello utente

E' possibile anche un'implementazione user level dei semafori. In tal caso: