In informatica, un semaforo è un oggetto virtuale gestito dal sistema operativo per sincronizzare l'accesso a una risorsa contesa tra più processi.
È composto da una variabile intera e dalla sua interfaccia, e da una coda di processi.
Tale concetto è stato inventato da Edsger Dijkstra, e usato per la prima volta nel sistema operativo THE.