El ejercicio 5 del práctico 5 te pide implementar semáforos binarios con semáforos no binarios y viceversa.
Un semáforo binario semánticamente se debe comportar de la siguiente manera:
bool libre_S;
init(S, valor_init: [0 o 1]):
libre_S = true si valor_init = 1; false en caso contrario
P(S):
mientras(not libre_S) espero;
libre_S = false;
V(S):
libre_S = true;
P y V vistos desde afuera deben ser indivisibles.
La implementación particular de los semáforos puede aprovechar los servicios del SO en particular para la parte de esperar, para no hacer un busy waiting podes bloquear al proceso y al hacer un V despertar a un proceso de los que estuviesen bloqueados esperando por el semáforo (teniendo en cuenta de mantener correctamente el estado del semáforo).
Saludos,
Gustavo