comp.lang.ada
 help / color / mirror / Atom feed
* semantics question about SELECT statement
@ 1993-03-05 14:52 cis.ohio-state.edu!zaphod.mps.ohio-state.edu!cs.utexas.edu!sun-barr!news2
  1993-03-07 21:08 ` semantics question about SELECT statement (typos fixed) Alex Blakemore
  1993-03-08 19:44 ` semantics question about SELECT statement Robert I. Eachus
  0 siblings, 2 replies; 3+ messages in thread
From: cis.ohio-state.edu!zaphod.mps.ohio-state.edu!cs.utexas.edu!sun-barr!news2 @ 1993-03-05 14:52 UTC (permalink / raw)


Hello Netters,

I have a question about guard evaluation in select statements.
Let us consider the piece of code below, excerpt from Ada Rationale,
section 13.2.11.

Let us assume this select is nested into a loop. Let us assume that at
some time all the guards of the select statement are opened, but no
rendez-vous is possible. Then, according to Reference Manual, section
9.7.1, the task waits on the open alternatives for a rendez-vous.

Let us assume now that two requests arrive at the same time but with
different priorities (e.g. URGENT and MEDIUM).

The question is: WHICH ONE OF THE TWO CLIENTS WILL BE SERVICED FIRST?
>From the Reference Manual, it seems to me that the clients **in that
case** are serviced in an arbitrary order (because the guards are not
reevaluated). 

It seems to me that the example below is OK only if the rendez-vous
are serviced in the textual order, i.e. the callers on the entry
REQUEST(URGENT) are serviced before the callers on the entry
REQUEST(MEDIUM), and so on, even when all the guards are opened and
several rendez-vous are possible on different entries.

Am I right, or am I missing something ?

----------------------------------------------------------------
   type LEVEL is (URGENT, MEDIUM, LOW);

   
   task CONTROL is
     entry REQUEST(LEVEL)(D :  DATA);
   end;
   
   task body CONTROL is
     ...
     select
       accept REQUEST(URGENT)(D :  DATA) do
         ...
       end;
     or when REQUEST(URGENT)'COUNT = 0 =>
       accept REQUEST(MEDIUM)(D :  DATA) do
         ...
       end;
     or when REQUEST(URGENT)'COUNT = 0
       and   REQUEST(MEDIUM)'COUNT = 0 =>
       accept REQUEST(LOW)(D :  DATA) do
         ...
       end;
     end select;
     ...
   end CONTROL;
----------------------------------------------------------------


--
Miguel ALABAU
Universite BORDEAUX I - LaBRI
351, cours de la Liberation   33405 TALENCE CEDEX (FRANCE)      
phone: (33) 56-84-69-35 / fax: (33) 56-84-66-69
e-mail: alabau@geocub.greco-prog.fr / alabau@labri.u-bordeaux.fr

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~1993-03-08 19:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1993-03-05 14:52 semantics question about SELECT statement cis.ohio-state.edu!zaphod.mps.ohio-state.edu!cs.utexas.edu!sun-barr!news2
1993-03-07 21:08 ` semantics question about SELECT statement (typos fixed) Alex Blakemore
1993-03-08 19:44 ` semantics question about SELECT statement Robert I. Eachus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox