Este documento describe la comunicación entre tareas mediante mensajes y citas en el lenguaje de programación Ada. Explica que los mensajes pueden enviarse de forma asíncrona o síncrona, y que las citas se definen mediante ACCEPT e implican una espera simétrica entre la tarea emisora y receptora. También incluye un ejemplo de un buffer que comunica tareas productoras y consumidoras mediante citas.
8. ACCEPT
• Sirven para definir las citas (son el RECEIVE)
• Están contenidas dentro de una tarea (task)
• Al invocarlas desde otra tarea, se produce el
envío del mensaje (SEND)
• Cuando una tarea ha ejecutado un ACCEPT
y otra lo ha llamado, se produce el rendez-
vous
10. Consideraciones sobre
ACCEPT
• Garantiza la exclusión mutua (una tarea sólo
puede aceptar las citas de una en una)
• Evita interbloqueos (se sigue orden FIFO)
• Espera simétrica (tanto emisor como
receptor se esperan hasta la cita)
11. SELECT
• Muy similar a un SWITCH en C
• Sólo se ejecuta un caso si se cumple la
condición y si hay una tarea esperando a
dicha cita
• Si hay varios casos en los que se cumplen
ambas, se ejecuta sólo uno
12. SELECT
WHEN condicion1 =>
ACCEPT cita1(args) DO
--cuerpo1
END cita1;
--otras sentencias1
OR
WHEN condicion2 =>
--otra cita
END SELECT;
16. Tarea Buffer (II)
while TRUE loop
select
when cantidad < K =>
--producir
or
when cantidad > 0 =>
--consumir
end select;
end loop;
17. Tarea Buffer (III)
when cantidad < K =>
accept Producir(x: in INTEGER) do
items(fin) := x;
end Producir;
cantidad := cantidad +1;
fin := (fin + 1) mod K;
18. Tarea Buffer (IV)
when cantidad > 0 =>
accept Consumir(x: out INTEGER) do
x := items(inicio);
end Producir;
cantidad := cantidad -1;
inicio := (inicio + 1) mod K;
19. Tarea Consumidor
while TRUE loop
Buer.Consumir(n);
Put(n);
end loop;
20. Tarea Productor
n := 0;
while TRUE loop
Buer.Producir(n);
n := n + 1;
end loop;
21. Preguntas (1)
• ¿Cuál es la diferencia entre el paso de
mensajes síncrono y el asíncrono?
• ¿Qué pasa cuando una tarea llama a una cita
pero la otra tarea no ha ejecutado un
ACCEPT?
22. Preguntas (II)
• En un SELECT, ¿Qué otra condición, aparte
de la del WHEN a de cumplirse para que se
ejecute el ACCEPT de un caso determinado?
• ¿Qué pasa si en un SELECT varios casos
cumplen las condiciones?