Formation ADA communication et synchronisation, tutoriel & guide de travaux pratiques en pdf.
Les entrées d’un objet protégé
Une entrée permet de définir des traitements sous conditions
–Chaque entrée possède une file d’attente à laquelle est associée une expression booléenne que l’on appelle «garde» ou «barrière». Dans ce cas on utilise la clause :
entrye whenexpression_booléenneis…
–L’entrée n’est «ouverte»que si cette expression (la garde) est vraie
–Lorsque l’entrée est «fermée»(la garde est fausse), les appels sur cette entrée sont mis en attente (ils ne seront traités que lorsque la garde redeviendra vraie)
–Une tâche, exécutant le code d’une entrée, peut être placée dans la file d’attente d’une autre entrée par l’instruction «requeue»
–Une tâche en attente sur une entrée interne est plus prioritaire qu’une tâche faisant un « nouvel » appel à une entrée (ou procédure) de l’objet protégé.
Si un appel est fait sur une entrée, alors la garde est évaluée; •l’évaluation de la garde est en section critique; •si la garde est vraie, l’entrée est exécutée en exclusion mutuelle; •si la garde est fausse, la tâche appelante est mise en « attenteinterne » et est placée dans une file d’attente associée à l’entrée appelée;
Quand une procédure ou une entrée de l’objet protégé se termine, toutes les gardes des entrées qui ont une tâche en attente interne sont évaluées; •si une garde au moins est vraie, l’une des tâches en attente interne sur cette entrée (et une seule) est choisie et l’accès exclusif à l’objet lui est attribué; •le choix d’une tâche parmi plusieurs possibles est non déterministe; •les tâches en attente interne ont priorité sur les tâches en attente externe; en particulier, un nouvel appel d’entrée ne peut pas évaluer de garde tant que l’appel en cours n’est pas terminé
A la fin d’une fonction, les gardes ne sont pas réévaluées puisque la fonction ne modifie pas de valeur.
Les entrées d’un objet protégé
Déclaration d’un objet protégéavec des entrées : protectedtype obj_protegeis entryA(..); entryB(..);
Définition du corps de l’objet protégé: protectedbody obj_protegeis entryA (..) is begin.. end A;
entryB (..) is begin.. end B; end obj_protege;
Déclaration d’une variable de type objet protégé: Obj: obj_protege;
Appel des entrées de l’objet protégédans un programme :
Obj.A(..); … Obj.B(..);