Az Ada95 védett objektumai

Az Ada95 védett objektumainak elsődleges célja egyszerű, erőforrás-takarékos szinkronizáció biztosítása adatokhoz való hozzáférésben. Használatukkal elérhetjük, hogy csak akkor kelljen új taszkot létrehoznunk, ha a vezérlés egy teljesen új, konkurrens szálának explicit deklarációjára van szükségünk. Védett műveletek lehetnek függvények, eljárások és belépési pontok is. Védett belépési pontok és eljárások hívásai a kölcsönös kizárás elvén alapulnak; az adott védett objektum semmilyen más művelete sem hajtódhat végre párhuzamosan, amíg egy védett eljárás, vagy belépési ponthoz tartozó program fut. Védett függvényeket végrehajthatunk párhuzamosan, mivel ezek nem változtathatják meg az objektum állapotát.


Védett objektumokat használhatunk:


Védett egységek deklarációjának módja megegyezik más programegységekével, de ki kell egészítenünk a 'protected' szóval. Deklarálhatunk így típusokat, melyekből később nevükre hivatkozva védett objektumokat hozhatunk létre, illetve egyszeri védett objektumokat.

Védett típus deklaráció:
protected type azonosító [ diszkrimináns ] is védett egység definíciója

Egyszeri védett objektum deklaráció:
protected azonosító is védett egység definíciója

Védett egység definíciója:
   {látható védett műveletek deklarációja}
[ private
   {rejtett védett műveletek és adattagok deklarációja} ]
end [ azonosító ]

Látható védett műveletek deklarációja:
alprogram deklaráció
   és/vagy
belépési pont deklaráció

Rejtett védett műveletek és adattagok deklarációja:
alprogram deklaráció
   és/vagy
belépési pont deklaráció
   és/vagy
adattag deklaráció

Védett programegység megvalósító része:
protected body azonosító is
   {védett művelet eleme}
end [ azonosító ]

Védett művelet eleme:
alprogram deklaráció
   és/vagy
alprogram megvalósítás
   és/vagy
belépési ponthoz tartozó program


Védett objektumok mindig 'limited'-ek, így nem adhatunk értéket neki, s két objektum egyenlőségét sem vizsgálhatjuk.


Amikor egy belépési ponthoz hívás érkezik, de nem teljesülnek a belépés feltételei, a hívó taszk addig várakozik, amíg a hívás végül végrehajtásra nem kerül. Egyébként a hívás védett műveletként hajtódik végre. Minden eljárás, vagy randevú után a különböző belépési pontokhoz tartozó feltétlek újra ellenőrzésre kerülnek, s ha valamelyik igazzá válik, akkor az esetleges várakozó hívás ugyanazon védett művelet részeként kerül végrehajtásra. Ez addig ismétlődik, amíg minden várakozó taszk kiszolgálásra nem kerül, illetve amíg nem marad olyan belépési pont, amelyhez tartozó feltétlek teljesülnek és van hozzá tartozó hívás. A védett művelet csak ez után ér véget. Hogy ezt az elvet hiánytalanul kövessük, nem ajánlatos globális változókat használni belépési feltételek meghatározásánál.


Egy védett egység esetében fontos, hogy minél gyorsabban lefusson. Ezáltal az erőforrást használó taszkok várakozási ideje minimalizálható. Az ada nyelv ezért nem teszi lehetővé, vagy nem ajánlja olyan utasítások használatát védett egységekben, melyek esetlegesen blokkolhatják a programegység lefutását. Ezek a következők:

Vissza