Escolar Documentos
Profissional Documentos
Cultura Documentos
consumer()
{
while (TRUE){ /* repetir indefinidamente */
if (count == 0) sleep(); /* si el buffer est vaco, bloquearse */
remove_item(); /* sacar el elemento del buffer */
count = count - 1; /* disminuir conteo de elementos */
if (count == N - 1) wakeup(producer); /* estaba lleno el buffer? */
consume_item(); /* imprimir el elemento */
}
}
Qu es un semforo?
Qu es un semforo?
Unsemforoes una variable entera que cuenta el
nmero de desbloqueos guardados para uso futuro.
Las operaciones para manejo de semforos son
down y up. La operacin down verifica un semforo
y si es mayor que 0 lo decrementa (es decir, utiliza
el desbloqueo almacenado) sino el procesos se
bloquea. La operacin up incrementa un semforo.
Si hay ms de un proceso bloqueado por ese
semforo, se elige uno al azar para desbloquearlo,
por tanto el semforo seguir siendo 0 pero habr
un proceso menos bloqueado en l.
Implantacin de semforos
consumer()
{
int item;
while (TRUE){ /* repetir indefinidamente */
produce_item(&item); /* generar el siguiente elemento */
down(full); /* disminuir el conteo completo */
down(mutex); /* entrar en regin crtica */
remove_item(); /* tomad un elemento del buffer */
up(mutex); /* salir de la regin crtica */
up(empty); /* incrementar ranuras vacas */
consume_item(); /* hacer algo con el elemento */
}
}