1. Por qué un simulador de problemas clásicos
Los problemas clásicos de sincronización involucran múltiples hilos que interactúan de forma compleja. Un solo error en la sincronización puede causar deadlocks o condiciones de carrera que son difíciles de reproducir y depurar.
Este simulador permite:
- Ver el estado de cada hilo: qué está haciendo, qué está esperando.
- Ver el estado del recurso compartido: el buffer, los tenedores.
- Avanzar paso a paso: ver cada operación individualmente.
- Experimentar: cambiar parámetros y ver el efecto.
En la realidad, las operaciones ocurren en paralelo y el estado cambia rápidamente. El simulador permite congelar el tiempo y ver cada operación individualmente.
2. El modelo
El simulador modela dos problemas clásicos:
- Productor-consumidor: un buffer acotado, productores que insertan, consumidores que extraen.
- Cena de los filósofos: filósofos que piensan y comen, tenedores compartidos.
En ambos casos, el simulador muestra el estado de cada hilo y del recurso compartido en cada paso.
3. Simulador de productor-consumidor
El simulador de productor-consumidor muestra:
- El buffer: un array circular con los elementos actuales.
- Los productores: cada uno con su estado (produciendo, esperando, terminado).
- Los consumidores: cada uno con su estado (consumiendo, esperando, terminado).
- El log: la secuencia de operaciones realizadas.
El simulador avanza paso a paso, mostrando qué hilo hace qué operación y cómo cambia el buffer.
4. Simulador de la cena de los filósofos
El simulador de la cena de los filósofos muestra:
- Los filósofos: cada uno con su estado (pensando, hambriento, comiendo).
- Los tenedores: cada uno con su estado (libre, tomado por quién).
- El log: la secuencia de eventos (tomar tenedor, comer, soltar).
El simulador puede mostrar la solución ingenua (que se bloquea) y la solución con asimetría (que no se bloquea).
5. La visualización
La visualización es clave para entender los problemas de sincronización. El simulador muestra:
- Colores: cada hilo tiene un color. Los recursos compartidos se colorean según quién los usa.
- Estados: los hilos se muestran con su estado actual (pensando, esperando, comiendo).
- Transiciones: las operaciones se muestran como transiciones de estado.
- Log: la secuencia de operaciones se registra para análisis posterior.
6. Casos de interés
El simulador permite explorar varios casos:
| Caso | Descripción | Qué observar |
|---|---|---|
| Productor-consumidor equilibrado | Igual número de productores y consumidores. | El buffer se mantiene estable. |
| Productor-consumidor desequilibrado | Más productores que consumidores. | El buffer se llena y los productores se bloquean. |
| Filósofos ingenuos | Solución ingenua (deadlock posible). | Los filósofos se bloquean. |
| Filósofos con asimetría | Solución con asimetría (sin deadlock). | Los filósofos comen sin bloquearse. |
7. Simulador interactivo
Este simulador muestra el productor-consumidor paso a paso:
Simulador · productor-consumidor
| Paso | Hilo | Operación | Buffer | Estado |
|---|
Este simulador muestra la cena de los filósofos paso a paso:
Simulador · cena de los filósofos
8. Extensiones posibles
- Modo paso a paso: un botón «siguiente» que avanza una operación a la vez.
- Visualización gráfica: mostrar el buffer y los tenedores como elementos gráficos.
- Animación: reproducir las operaciones con un temporizador.
- Estadísticas: tiempo de espera de cada hilo, número de bloqueos.
- Comparación: mostrar dos soluciones lado a lado.
9. Resumen
- El simulador muestra productor-consumidor y cena de los filósofos paso a paso.
- Cada hilo tiene un estado visible (ejecutando, bloqueado, terminado).
- El recurso compartido (buffer, tenedores) se muestra en cada paso.
- El log registra la secuencia de operaciones.
- El simulador permite experimentar con parámetros.
- Es la herramienta que cierra el bloque de problemas clásicos.
10. Preguntas de repaso
Intenta responder cada una antes de abrir la respuesta.
1. ¿Qué problemas simula?
Productor-consumidor y la cena de los filósofos.
2. ¿Qué muestra el simulador?
El estado de cada hilo y del recurso compartido paso a paso.
3. ¿Qué es un paso en el simulador?
Una operación individual (insertar, extraer, tomar tenedor, soltar).
4. ¿Qué se registra en el log?
La secuencia de operaciones con el estado del recurso en cada paso.
5. ¿Qué casos de interés se pueden explorar?
Buffer equilibrado/desequilibrado, filósofos ingenuos/con asimetría.
6. ¿Qué bloque del curso cierra este simulador?
El bloque 7 (problemas clásicos de sincronización).
7. ¿Por qué es útil el simulador?
Porque permite ver el estado de cada hilo y del recurso en cada paso.
8. ¿Qué extensión permitiría comparar dos soluciones?
Mostrar dos simulaciones lado a lado.
9. ¿Qué es una animación en este contexto?
Reproducir las operaciones con un temporizador para ver el flujo.
10. ¿Qué se puede aprender del simulador?
Cómo interactúan los hilos y por qué se bloquean.
Para practicar
- Ejecuta el simulador de productor-consumidor con 2 productores y 2 consumidores.
- Ejecuta el simulador de filósofos con la solución ingenua y observa el deadlock.
- Ejecuta con asimetría y observa que no hay deadlock.
- Modifica el simulador para añadir modo paso a paso.
- Implementa la visualización gráfica del buffer y los tenedores.
- Compara el simulador con una ejecución real en C.