Rendez-Vous, vč. select v Adě, a jeho porovnání s monitorem. 

Ada je objektově orientovaný jazyk se silnou verifikací typů (nelze implicitně přetypovat datové typy – např. void pointer)

nepoužívá interpretr

paralelní části výpočtu se označují jako tasky (ne thready)

mohou být prováděny na jednom procesoru, více procesorech nebo více počítačích, není to však vyjádřeno v kódu programu

pro synchronizaci tasků se používá asymetrické synchronní rendezvous (zasílání zpráv)

Konstrukce task představuje program paralelně proveditelného procesu, schopného komunikace s ostatními procesy.

deklarace jmen komunikačních typů

lokální deklarace a příkazy

pro ukončení procesu lze použít příkaz abort jméno;, ale jeho použití by mělo být výjimečné

k ukončení tasku se používá příkaz terminate

Pro interakci procesů používá ADA principu asymetrického rendezvous, kterým eliminuje potřebu semaforů (umí je nahradit), umožňuje synchronní a nepřímo (zavedením pomocného procesu) i asynchronní komunikaci procesů zasíláním zpráv. Dovoluje tak elegantní konstrukci monitorů. 

prostředek pro synchronizaci úkolů (tasks)

task je uspán do té doby, než se dostaví druhý task, který s ním chce komunikovat

//čeká na vložení čísla – entry call

//normálně pokračuje v běhu

//čeká na vyzvednutí spočítané hodnoty

uvedený příklad stačí, pouze pokud potřebujeme jen jedno vlákno běžící podle uvedeného kódu

průběh dostaveníčka - accept:

server si převezme parametry

server provede výpočet, klient spí

server předá výsledky

Select - může být nezbytné, aby úkol mohl reagovat na několik vstupních volání (entry calls) – pokaždé na jiné dle okolností – tj. ne v předem určeném pořadí

//Vynutíme si inicializaci a další se

//už pak může vykonávat v libovolném

//pořadí.

when podmínka = > //může i nemusí být

objekt je instance typu – klíčové slovo type

klíčové slovo protected zajistí exkluzivní přístup k chráněnému objektu

jsou tři operace nad chráněnými objekty:

Procedury – mění stav objektu, aniž by pro to musela být splněna podmínka; překladač se stará, aby měly exkluzivní přístup k objektu

Entry calls – stejné jako procedury, ale pro vykonání entry call je třeba navíc splnit podmínku

Funkce – pouze vrací stav a nic nemění, a proto nemusí mít exkluzivní přístup k objektu

The previous example is highly reminiscent of the monitor solution. Both provide “structured” approaches to mutual exclusion. Mutual exclusion is implicit in both monitors and rendezvous.

• Only client threads exist.

• The client thread performs the service for itself inside the monitor.

• Server state does not change spontaneously.

• The server thread acts on behalf of the client thread within the module for the duration of the rendezvous.

• Server threads may change the module state in between calls from clients.

[link] - viz příloha
