
Un semáforo es una variable S entera que toma valores no negativos, y sobre la cual aparecen definidas 2 operaciones:
1. Wait(S)
Si S>0 entonces S:=S-1. En caso contrario se suspende la ejecución del proceso y éste quede
bloqueado en el semáforo S.
2. Signal(S)
Si hay algún proceso que ha sido suspendido en el semáforo se le despierta y puede continuar
su ejecución. En caso contrario S:=S+1.
Los semáforos tienen las siguientes propiedades:
1. Wait y Signal son instrucciones atómicas. Ninguna instrucción puede ir entrelazada entre
la comprobación de si S > 0 y el decremento de la variable o la suspensión del proceso.
2. El valor inicial de un semáforo es un número no negativo.
3. La operación Signal debe despertar a uno de los procesos suspendidos en el semáforo,
pero la definición no especifica a cuál. Esto podría llevar a pensar que los semáforos no
garantizan la vivacidad. La siguiente hipótesis nos permite asegurarla.
4. Hipótesis de corrección de los semáforos: si un proceso P está bloqueado en un semá-
foro S y este toma un valor estrictamente mayor que cero con una frecuencia infinita, el
proceso P eventualmente será desbloqueado.
Los semáforos serán generales si pueden tomar cualquier valor no negativo, y binarios si solo pueden tomar
los valores 0 y 1. En este último caso, la instrucción de incremento de la operación Signal se sustituye por
S := 1.
En la literatura la notación habitual para las operaciones sobre semáforos es la siguiente:
Wait(S) = P(S)
Signal(S)= V(S)