2017-05-30 1 views
0

Je suis un débutant absolu avec Ada, et il y a une chose que je ne peux pas trouver une définition concrète pour - c'est la déclaration entry.Ada: Entrée sens

Je comprends une entrée avec une barrière - si la barrière est vraie, l'instruction peut s'exécuter et si elle est fausse, la tâche est mise en file d'attente jusqu'à ce qu'elle soit évaluée comme vraie.

Par exemple:

entry Get(Item : out Data_Item) when Number_In_Buffer /= 0 is 
begin 
... 
end Get; 

Mais qu'est-ce que cela signifie pour la déclaration entry apparaître sans une déclaration when suivante?

Répondre

4

ARM9.4 décrit les objets protégés, où se produisent les corps d'entrée (comme dans votre code).

Ce n'est pas clair à partir de votre question, mais je pense que vous décrivez une spécification protégée, avec une déclaration d'entrée.

Declaration:

protected type Resource is 
    entry Seize; 
    procedure Release; 
private 
    Busy : Boolean := False; 
end Resource; 

Corresponding body:

protected body Resource is 
    entry Seize when not Busy is 
    begin 
     Busy := True; 
    end Seize; 

    procedure Release is 
    begin 
     Busy := False; 
    end Release; 
end Resource; 

Il n'est pas surveillé est comment l'entrée des activités de l'appelant, juste qu'il est. Une chose qui m'a attrapé une ou deux fois est qu'un corps d'entrée doit avoir un garde; il y a certaines circonstances (réquisition - recherche the Ada 95 Rationale II.9 pour protected Event) où when True est OK.

+2

@ User9123 Pour ajouter à l'explication de Simon, vous semblez peu clair sur les différences entre la spécification d'un objet protégé et le corps de l'objet protégé. Le garde est seulement dans le corps, pas dans la spécification. –

0

Une ENTRÉE est également un point de connexion pour la communication TASK. Dans la définition TASK, c'est ENTRY. Dans le TASK BODY, il s'agit d'une instruction ACCEPT. Ainsi, chaque ENTRÉE dans une définition TASK a un ACCEPT correspondant dans le corps TASK.

+2

Pas strictement vrai, mais indique probablement une erreur. GNAT vous avertira à ce sujet (vous devrez peut-être donner les bonnes options, «-gnatwa», je pense). Il est vrai que chaque «acceptation» dans le corps doit avoir une «entrée» correspondante dans la spécification. –