Practico 5 ejercicio 7

Practico 5 ejercicio 7

de Gabriel Gustavo Sosa Nieto -
Número de respuestas: 1

Buenos días. Hice el código de este ejercicio y tenia varias dudas:

1- En la letra plante que hay 4 semáforos para sincronizar los procesos pero hice uso de solo 2 (auto_entrada,barco_entrada) y no veo donde son necesarios los otros dos (auto_salida,barco_salida).

2- En la linea 20 bloqueo con el semáforo auto_entrada. Al desbloquearse por el ultimo barco (que hace una cantidad de V(auto_entrada) igual a la cantidad de autos esperando) eventualmente podría venir otro barco después que se desbloqueo el auto y se viola la zona de mutua exclusión. Para evitar esto no podemos quedarnos con el control del semáforo contBarcosEnPuenteS porque sino los barcos no pueden circular por el puente. Y aquí la pregunta: en la linea 26 es considerado busy waiting ese while? No se queda esperando constantemente porque espera que el ultimo barco ("BarcoMolesto") lo despierte nuevamente para chequear la condición; pero no estoy seguro si es correcto hacer eso o si hay alguna alternativa mejor.

3- En el programa principal como puedo poner en ejecución concurrentemente N proceso auto y M proceso barco sin utilizar los "Task type" de ADA. (y que no sea escribir N veces y M veces )

Adjunto el código.

Muchas gracias.

Saludos.


En respuesta a Gabriel Gustavo Sosa Nieto

Re: Practico 5 ejercicio 7

de Gustavo Brown -

Ese ejercicio está pensado para resolver con una tarea auxiliar "Puente". Por eso es que usa 4 semáforos distintos, sirven para comunicarse/sincronizarse con esa tarea auxiliar.

El problema se puede resolver sin tarea auxiliar pero en ese caso no tiene mucho sentido el código propuesto para las tareas.

La solución no debe tener busy waiting.

Saludos,
   Gustavo