Para que una simulación sea siquiera posible, el tiempo de burnout debe permitir al menos un ciclo completo de trabajo.
La condición mínima para que un coder sobreviva al menos una compilación es:
<aside> 💡
</aside>
Pero, para que pueda repetir (según el requisito de compiles_required), el tiempo de burnout debe ser mayor que el tiempo que pasa "fuera" del dongle, porque el contador de muerte sigue corriendo mientras espera en la cola:
<aside> 💡
(time_to_compile + time_to_debug + time_to_refactor + dongle_cooldown)
</aside>
number_of_coders vs dongles:
number_of_coders impares y requieres 2 dongles para compilar, siempre habrá alguien esperando. Prueba con 1, 3, 5 coders. Los números impares suelen ser donde ocurren los deadlocks.time_to_compile muy pequeño (ej. 1ms). Esto estresa el planificador de hilos del sistema operativo y los mutex. Si falla aquí, es que existen problemas de condiciones de carrera (Race Conditions) en el acceso a las variables compartidas.monitor está realmente comprobando la muerte en tiempo real o si se queda bloqueado esperando a que una función termine.✨Escenario ideal
valgrind --leak-check=full --show-leak-kinds=all ./codexion 4 800 100 100 100 5 10 fifo
🔥Burnout forzado
valgrind --leak-check=full --show-leak-kinds=all ./codexion 3 50 200 100 100 10 0 fifo