Ya están los resultados del laboratorio en el EVA.
El total de puntos del laboratorio eran 5, 3 por la resolución del ejercicio y 1 punto por cada corrección.
Algunos comentarios generales:
- Escriban el programa principal y cuando sea necesario escriban el bloque cobegin-coend. Recuerden que en ADA si las tareas son types, deben declararlas en el programa principal. Es verdad que muchas veces estos procesos o tareas son "infinitos", utilicen los "..." o comenten explícitamente.
- Inicialicen las variables, los semáforos, los mailboxes, etc. Declaren cuando sea necesario cuál es la lógica del mecanismo que están usando (p.e., en mailbox explicitar como son el send y receive, infinito o no, etc.).
- Cuando tienen que solicitar varios recursos, como en el ejercicio de ADA, pedirlos en orden es una buena opción para evitar el deadlock (filósofos comensales).
- Ojo con los bucles infinitos que revisan una variable de tipo boo (aunque mutuo excluyan el acceso a la misma).
- Una vez liberan la región crítica, los valores de esas variables ya no son confiables en el proceso. No utilicen variables globales (región crítica) sin hacer mutex.
- Hay procesos que "viven" a lo largo de toda la ejecución y otros que "nacen y mueren". Por ejemplo, el jefe de pista vive a lo largo de toda la ejecución, por lo tanto tiene en su implementación un loop infinito. En cambio, los autos no, "aparecen, ejecutan y se van". No tienen un loop infinito en su implementación.
- Si piden una región crítica, devuélvanla. Si inicializan un semáforo de conteo en 1 para usar como mutex, y un mismo proceso hace dos operaciones P() seguidas en ese mismo semáforo, quedan en deadlock.
Saludos,
Alberto.