Una simulación de una taquería en hora pico donde cada cliente y cada trabajador es un hilo real: meseros, cocineros, taquero del trompo, tortillera, cajero, garroteros y lavaplatos trabajan al mismo tiempo y se coordinan con semáforos, colas bloqueantes y locks. Un turno completo, de las 16:00 a la medianoche, en tres minutos.
Nadie espera a que otro termine para empezar, pero todos comparten recursos limitados. Cada uno de estos procesos corre en su propio hilo:
Llegan al azar, se forman, gastan paciencia, comen, pagan y se van. Si la fila no avanza, se cansan y se van sin entrar.
Toman órdenes, entregan platos y cobran por prioridad. Cuelgan las comandas en un riel con cupo: si está lleno, esperan.
Los cocineros toman pastor de la charola del trompo y tortillas del comal: dos productores y varios consumidores compitiendo.
Doce cajones protegidos con un semáforo. Si el lote está lleno, el auto da vueltas a la manzana y a la tercera se va.
La despachadora toma pastor de la misma charola que la cocina. Si el cliente se cansa justo al ser atendido, solo uno gana la carrera.
Una mesa sucia no se vuelve a ocupar hasta que un garrotero la limpia. Los platos sucios llegan al lavaplatos, que lava por tandas.
Si esperan más de seis personas, contrata un mesero y un cocinero temporales; cuando la fila se calma, los despide sin cortar su tarea.
La lluvia y el calor cambian por su cuenta y desesperan a la fila de afuera. Las reseñas del día mueven la calificación y las llegadas de mañana.
Atendidos, ventas, tiempos promedio, eventos y lo que produjo cada trabajador, actualizados mientras corre y resumidos en el corte del día.
Capturas de la aplicación funcionando a velocidad normal. Todo lo que se mueve es un hilo trabajando; nada está animado a mano.




Un núcleo de simulación que no sabe nada de la interfaz y una ventana en WPF que solo observa. Primitivas reales del lenguaje, sin efectos visuales que finjan concurrencia.
Un grupo sin paciencia y la recepcionista intentan cambiar el mismo estado al mismo tiempo. Un comparar e intercambiar decide: solo uno gana.
Al irse un grupo, la mesa no devuelve su permiso al semáforo; solo el garrotero lo devuelve al limpiarla.
El núcleo publica una foto inmutable del estado con un intercambio atómico. La ventana la lee y dibuja; no toma un solo candado de la simulación.
Las pruebas comprueban que los platos se conservan, que la caja cuadra, que nunca hay más autos que cajones y que todos los hilos terminan al cerrar.
Las llegadas, el tamaño de los grupos, lo que piden, los tiempos y el clima se generan al azar dentro de rangos razonables. Estos son los cortes del día 1 de dos ejecuciones seguidas.
| Día 1 | Ejecución 1 | Ejecución 2 |
|---|---|---|
| Grupos que llegan | 82 | 68 |
| Personas atendidas | 189 | 163 |
| Ventas | $14,283 | $12,353 |
| Temporales contratados | 12 | 6 |
| Espera promedio de mesa | 17.9 min | 18.3 min |
| Eventos del día | 218 | 191 |
| Duración real del turno | 03:00 | 03:00 |
El proyecto se rehízo dos veces hasta que la concurrencia y la escena contaran la misma historia.
La lógica de clientes, meseros y cocina con hilos de Java. Sirvió para encontrar el modelo; la interfaz se quedó corta.
Todo se rehízo en .NET con un hilo explícito por actor, un núcleo que no conoce la interfaz y una ventana que solo lee fotos inmutables.
Vestíbulo, salón, cocina y calle en perspectiva, con lavaplatos y taquero del trompo como hilos nuevos, día y noche, clima y reputación persistente.
Estacionamiento con semáforo, tortillera y comal, pedidos para llevar que compiten por el pastor, mesas sucias y garroteros. El turno completo quedó en tres minutos.
Barra de estadísticas en vivo, desempeño por trabajador, eventos por tipo, tiempos promedio y un corte del día completo, con su manual de usuario y documentación técnica.