Programación en Ada/Tareas/Sincronización mediante citas
Sincronización de tareas mediante puntos de entrada o citas (entry)
editarFrecuentemente, 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
Tareais
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
TNivelis
Integerrange
1..10;task
Controladoris
-- 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.