Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
Introducción
2
Tareas
task T is
…
end T;
task body T is
…
end T;
3
Ejemplo COMPRA
procedure COMPRAR is
begin
COMPRAR_CARNE;
COMPRAR_ENSALADA;
COMPRAR_VINO;
end;
4
Ejemplo COMPRA (concurrente)
Procedure COMPRAR is
task OBTENER_ENSALADA; •Una tarea se activa
task body OBTENER_ENSALADA is
begin de forma automática
COMPRAR_ENSALADA; al llegar al comienzo
end OBTENER_ENSALADA; del procedimiento.
task OBTENER_VINO;
task body OBTENER_VINO is
begin
•El procedimiento no
COMPRAR_VINO; termina hasta que no
end OBTENER_VINO; terminen todas las tareas
begin
dependientes de él.
COMPRAR_CARNE;
end COMPRAR;
5
La cita
6
La cita: sentencia accept
accept E(…) do
-- conjunto de sentencias
end E;
7
¿Qué ocurre en la cita?
9
Más sobre puntos de entrada
Cada punto de entrada tiene una cola de tareas que esperan
llamar al punto de entrada.
Si hay varias tareas llamando a un punto de entrada, éstas serán encoladas.
La cola puede estar vacía.
Cada ejecución de la sentencia accept retira una tarea de la cola.
10
Sentencia SELECT
11
Condiciones de guarda
loop
Task BUFFERING is select
when CUENTA<N =>
entry DEPOSITAR (X: in ITEM); accept DEPOSITAR(X: in ITEM) do
entry RETIRAR (X: out ITEM); BUF(ENT):= X;
end DEPOSITAR;
end; ENT.= (ENT+1) mod N;
task body BUFFERING is CUENTA:=CUENTA+1;
or
N: constant:= 8; when CUENTA>0 =>
BUFF: array (0..N-1) of ITEM; accept RETIRAR(X: out ITEM) do
X:= BUF(SAL);
ENT,SAL: INTEGER range 0..N-1:=1; end RETIRAR;
SAL:= (SAL+1) mod N;
CUENTA: INTEGER range 0..N:=0; CUENTA:= CUENTA -1;
begin end select;
end loop;
end BUFFERING;
12
Más sobre condiciones de guarda
13
Otras formas de SELECT
select select
llamada / accept llamada / accept
else else
conjunto de sentencias delay tiempo;
end select;
conjunto de sentencias
end select;
select
llamada / accept
or
delay tiempo;
conjunto de sentencias
end select;
14