Programación en Ada/Tareas/Sincronización mediante citas

De Wikilibros, la colección de libros de texto de contenido libre.
← Tareas Sincronización mediante citas Tareas/Aceptación de citas →


Sincronización de tareas mediante puntos de entrada o citas (entry)[editar]

Frecuentemente, las tareas interaccionan entre sí y necesitan un mecanismo para comunicarse y sincronizarse, este mecanismo que ofrece Ada se conoce como la cita (rendezvous) o punto de entrada a la tarea.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 especificación de la tarea, por ejemplo:

task Tarea is
  entry Entrada (N: Integer);
end Tarea;

Un punto de entrada se asemeja a un procedimiento. Los parámetros que admiten son de modo in, out o in out, por defecto, se sobreentiende in. Para invocar a un punto de entrada, se procede de igual manera que en un procedimiento, por ejemplo:

T: Tarea;
-- ...
T.Entrada (8);

Nótese que se debe emplear la notación punto siempre que se realice la llamada fuera de la misma tarea pues una tarea no puede aparecer en una cláusula use. Realizar una llamada a un punto de entrada propio desde la misma tarea está permitido sintácticamente, pero resulta ilógico, pues produciría un interbloqueo consigo misma.

También se pueden definir varios puntos de entrada simultáneamente, por ejemplo:

type TNivel is Integer range 1..10;
task Controlador is
  -- Se define un punto de entrada por cada nivel.
  entry Aviso (TNivel) (Elem: TElemento);
end Controlador;

Y se podría llamar a un punto de entrada de los 10 definidos como, por ejemplo:

ProcesoColtrol: Controlador;
-- ...
ProcesoControl.Aviso (3) (1773);

Con ello, se llama al punto de entrada Aviso con el nivel 3 y parámetro 1173.

Las acciones que se llevan a cabo al aceptar una cita se especifican mediante la sentencia accept, tal y como se explica en el apartado siguiente.

Manual de referencia de Ada[editar]