← Concurrencia y Sincronización Bloque 5 · Semáforos · Tema 24 de 47

Tema 24

Simulador de semáforos

Los semáforos son difíciles de entender porque su estado (el contador y la cola de espera) cambia con cada operación. Este simulador muestra hilos, un contador y una cola de espera en una página interactiva, para ver cuándo se bloquea cada hilo, cuándo se despierta y cómo cambia el contador. Es la herramienta que cierra el bloque de semáforos.

1. Por qué un simulador de semáforos

Los semáforos son difíciles de entender porque su comportamiento depende del orden en que los hilos ejecutan wait y post. Un hilo puede bloquearse, esperar en una cola, y despertarse más tarde. El estado del semáforo (el contador y la cola) cambia con cada operación, y es difícil de rastrear mentalmente.

Este simulador muestra el estado del semáforo (contador y cola de espera) y el estado de cada hilo (ejecutando, bloqueado, terminado) en cada paso. Permite experimentar con diferentes valores iniciales y secuencias de operaciones.

El simulador es un microscopio

En la realidad, las operaciones de wait y post ocurren en cualquier orden y el estado del semáforo cambia rápidamente. El simulador permite ver cada operación paso a paso y entender por qué un hilo se bloquea o se despierta.

2. El modelo: hilos, contador y cola

El simulador modela un semáforo con:

Cada hilo ejecuta una secuencia de operaciones: wait, post, o trabajo (que no afecta al semáforo). El simulador procesa las operaciones en orden de tiempo y actualiza el estado del semáforo y de los hilos.

3. Las operaciones del simulador

El simulador soporta tres operaciones:

OperaciónEfecto en el semáforoEfecto en el hilo
waitDecrementa el contador. Si es 0, el hilo se bloquea.El hilo se bloquea o continúa.
postIncrementa el contador. Despierta a un hilo bloqueado.El hilo continúa.
trabajoNo afecta al semáforo.El hilo hace trabajo (no se bloquea).

4. Los estados de un hilo

Cada hilo puede estar en uno de estos estados:

EstadoDescripciónColor
EjecutandoEl hilo está ejecutando una operación.Verde
BloqueadoEl hilo hizo wait y el semáforo era 0. Espera en la cola.Rojo
TerminadoEl hilo completó todas sus operaciones.Gris

5. La visualización

El simulador muestra:

6. Casos de uso

El simulador permite explorar varios casos de uso:

7. Simulador interactivo

Este simulador muestra el estado del semáforo y de los hilos paso a paso. Ajusta el valor inicial y el número de hilos, y observa cómo cambia el estado:

Simulador · semáforo

PasoHiloOperaciónValor antesValor despuésEstado del hilo

8. Extensiones posibles

9. Resumen

10. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué muestra el simulador?

El estado del semáforo (contador y cola) y el estado de cada hilo paso a paso.

2. ¿En qué estados puede estar un hilo?

Ejecutando, bloqueado o terminado.

3. ¿Qué ocurre cuando un hilo hace wait y el semáforo es 0?

El hilo se bloquea y se añade a la cola de espera.

4. ¿Qué ocurre cuando un hilo hace post y hay hilos bloqueados?

Se incrementa el contador y se despierta al primer hilo de la cola.

5. ¿Qué modos soporta el simulador?

Binario (mutex), general (N permisos) y señalización (valor 0).

6. ¿Qué es la cola de espera?

Los hilos bloqueados esperando un permiso, en orden FIFO.

7. ¿Por qué es útil el simulador?

Porque permite ver el estado del semáforo y de los hilos en cada paso.

8. ¿Qué extensión permitiría simular productor-consumidor?

Añadir un buffer acotado y dos semáforos (vacíos y llenos).

9. ¿Qué bloque del curso cierra este simulador?

El bloque 5 (semáforos).

10. ¿Qué es trywait?

Intentar decrementar sin bloquear. Devuelve EAGAIN si no hay permisos.

Para practicar

  1. Ejecuta el simulador con valor inicial 1 y 4 hilos. Observa el bloqueo.
  2. Ejecuta con valor inicial 3 y observa que 3 hilos entran sin bloquearse.
  3. Ejecuta en modo señalización y observa el rendezvous.
  4. Modifica el simulador para añadir trywait.
  5. Implementa el productor-consumidor en el simulador.
  6. Investiga cómo se visualiza una barrera en el simulador.