Está técnica permite resolver la mayoría de los problemas de sincronización entre procesos y forma
parte del diseño de muchos sistemas operativos y de lenguajes de programación concurrentes. Un
semáforo binario es un indicador (S) de condición que registra si un recurso está disponible o no. Un
semáforo binario sólo puede tomar dos valores: 0 y 1.
Sólo se permiten tres operaciones sobre un semáforo
Inicializar
Espera
Señal
(S) if la cola de tareas está vacía then S := 1 else
reanudar la primera tarea de la cola de tareas
(S) if S = 1 then S: = 0 else suspender la tarea
que hace la llamada y ponerla en la cola de
tareas
(S: SemaforoBinario; v: integer) Poner el valor
del semáforo S al valor de v (0 o 1)
Funcionamiento de los semáforos
Dos o más procesos pueden cooperar por medio de simples
señales, de forma que se pueda obligar a detenerse a un proceso
en una posición determinada hasta que reciba una señal
específica. Cualquier requisito complicado de coordinación puede
satisfacerse por medio de la estructura de señales adecuada.
Un semáforo debe inicializarse con un valor no negativo.
La operación wait decrementa el valor del semáforo. Si el valor del
semáforo se hace negativo, el proceso que ejecuta el wait se bloquea.
La operación signal incrementa el valor del semáforo. Si el valor no
es positivo, se desbloquea a un proceso bloqueado por una posición
wait.