Академический Документы
Профессиональный Документы
Культура Документы
Invocacin remota
Puntos de entrada (entries) Construccin accept Espera selectiva con select Espera selectiva con guardas Terminacin de tareas (terminate y abort)
La cita (rendez-vous)
Las tareas en Ada pueden dialogar unas con otras mediante paso de mensajes. Se hace mediante el mecanismo de cita o rendez-vous (que significa sincronizacin e intercambio de informacin entre dos tareas dadas)
Escenarios de citas
Proceso A Proceso B Proceso A Proceso B
accept pe
B.pe
La cita entre dos tareas se produce como consecuencia de la llamada de una tarea a un punto de entrada declarado en otra tarea. Los puntos de entrada se declaran en la especificacin de una tarea, de forma similar a la declaracin de un procedimiento en la especificacin de un paquete.
task EJEMPLO is entry SIN_PARAMETROS; entry CON_PARAMETROS(A:in INTEGER;B:out FLOAT; C:in out BOOLEAN); private entry .....; end EJEMPLO;
Un punto de entrada puede tener parmetros in, out e in out Los parmetros son el medio para el intercambio de informacin entre las dos tareas que dialogan en la cita. Si en la declaracin de un punto de entrada no hay parmetros significa que el punto de entrada sirve nicamente como una seal de sincronizacin.
Se llama a un punto de entrada con la misma sintaxis que una llamada a procedimiento. Nombre_de_tarea . Punto_de_entrada (args)
Una tarea elige cmo y cuando recibir las llamadas que se le hacen.
Sentencias accept
Las sentencias que se ejecutarn durante una cita se describen mediante las sentencias accept correspondientes
Las sentencias accept se encuentran dentro del cuerpo de la tarea.
task body EJEMPLO is begin ... accept SIN_PARAMETROS do --conjunto de sentencias que se ejecutarn en la cita --correspondiente al punto de entrada SIN_PARAMETROS [exception:] end SIN_PARAMETROS; ... accept CON_PARAMETROS(A:in INTEGER;B:out FLOAT;C:in out BOOLEAN) do --conjunto de sentencias que se ejecutarn en la cita --correspondiente al punto de entrada CON_PARAMETROS end CON_PARAMETROS; end A;
Vista completa
task EJEMPLO is entry SIN_PARAMETROS; entry CON_PARAMETROS(A:in INTEGER;B:out FLOAT; C:in out BOOLEAN); end EJEMPLO; task body EJEMPLO is begin ... accept SIN_PARAMETROS do --conjunto de sentencias que se ejecutarn en la cita --correspondiente al punto de entrada SIN_PARAMETROS end SIN_PARAMETROS; ... accept CON_PARAMETROS(A:in INTEGER;B:out FLOAT;C:in out BOOLEAN) do --conjunto de sentencias que se ejecutarn en la cita --correspondiente al punto de entrada CON_PARAMETROS end CON_PARAMETROS; ... end A;
La cita o rendez-vous
task PEON is entry PREPARAR_MEZCLA(cantidad:in INTEGER); end PEON; task body PEON is begin loop --Pen haciendo otros trabajos ... accept PREPARAR_MEZCLA(cantidad: in INTEGER) do --prepara la mezcla ... -mezcla preparada end PREPARAR_MEZCLA; end loop; end PEON;
task ALBAIL;
task body ALBAIL is cantidad: integer; begin loop --Trabajando ... PEON.PREPARAR_MEZCLA(cantidad); ... end loop; end ALBAIL;
Sentencia Select
select accept A(X: out item) do --sentencias end; --ms sentencias or accept B(X:in item) do --sentencias end; --ms sentencias or ... end select;
Las guardas se evalan una sola vez, cuando la tarea entra en la construccin select. La tarea se queda esperando en los accept que tienen las guardas evaluadas a cierto. Si todas las guardas son falsas se eleva la excepcin PROGRAM_ERROR
Atributo COUNT
El atributo ECOUNT devuelve el nmero de tareas que estn en la cola del punto de entrada E en el momento de la llamada. OJO al uso del atributo COUNT en las guardas !
Da el nmero de tareas encoladas en el momento en que la guarda se evala, y este puede cambiar antes de que se acepte la cita
Construccin terminate
Se toma la alternativa terminate si la unidad de la que la tarea depende ha llegado al final, y por tanto, est completada
y adems todas las tareas hermanas y tareas dependientes han terminado o pueden anlogamente seleccionar una alternativa terminate
select ... or ... or terminate; end select;
Puede estar guardada, pero no puede aparecer en una sentencia select que tenga una alternativa delay o else
Sentencia abort
Si se aborta una tarea, entonces todas las tareas que dependen de ella, o de un subprograma o bloque llamados en ese momento por ella, se abortan tambin.
Situaciones
La cita se completa, aunque Tarea llamada -> TASKING_ERROR Tarea llamante -> mientras dura la cita, queda en un estado anormal
TTERMINATED
Cierto si T ha terminado
TCALLABLE
Cierto a menos que la tarea se haya completado o terminado o se encuentre en un estado anormal pendiente de que la aborten
TASKING_ERROR
Si se produce una excepcin durante una cita en la tarea llamada y no se maneja dicha excepcin en el accept correspondiente, se propaga la excepcin en ambas tareas
Si una tarea no maneja una excepcin de ninguna manera, se abandona la tarea y se pierde la excepcin