Na programação, especialmente em sistemas Unix, os semáforos são uma técnica para coordenar ou sincronizar atividades nas quais múltiplos processos competem pelos mesmos recursos do sistema operacional. Um semáforo é um valor em um local designado no armazenamento do sistema operacional (ou kernel) que cada processo pode verificar e depois alterar. Dependendo do valor encontrado, o processo pode utilizar o recurso ou vai descobrir que ele já está em uso e deve esperar por algum período antes de tentar novamente. Os semáforos podem ser binários (0 ou 1) ou podem ter valores adicionais. Normalmente, um processo que utiliza semáforos verifica o valor e depois, se estiver a utilizar o recurso, altera o valor para o reflectir de modo a que os utilizadores de semáforos subsequentes saibam esperar.
Semáforos são normalmente utilizados para dois fins: para partilhar um espaço de memória comum e para partilhar o acesso a ficheiros. Os semáforos são uma das técnicas de comunicação inter-processo (IPC). A linguagem de programação C fornece um conjunto de interfaces ou "funções" para gerenciar os semáforos.