From: Simon Wright <simon@pushface.org>
Subject: Re: Interrupts handling in ADA
Date: Tue, 13 Dec 2011 18:24:30 +0000
Date: 2011-12-13T18:24:30+00:00 [thread overview]
Message-ID: <m239co9voh.fsf@pushface.org> (raw)
In-Reply-To: 515d5501-c89b-4a9d-82b6-ec3539a0c2cf@r6g2000yqr.googlegroups.com
Ada BRL <ada.brl.2011@gmail.com> writes:
> On 13 Dic, 15:34, Simon Wright <si...@pushface.org> wrote:
>> Simon Wright <si...@pushface.org> writes:
>> > Also, this isn't called an accept statement; it's an entry call. The way
>> > a task indicates it's prepared to accept an entry call is by an accept
>> > statement; protected objects are different. So if instead of Queue being
>> > protected it was a task (not something I'd recommend) the corresponding
>> > body part would have looked like
>>
>> > accept Get (M : out Message) when not Buffer.Is_Empty do
>>
>> :blush: I can't believe I said that!
>>
>> The relevant section of the ARM is 9.7.1, Selective Accept, and it'd
>> have looked like
>>
>> select
>> when not Buffer.Is_Empty =>
>> accept Get (M : out Message) do
>> M := ...
>> end Get;
>> or
>> accept Put ...
>
> Does this means that if the Buffer is empty I will accept the Put
> instead of Get? So the "or" refers to the condition before "=>"
When the compiled code gets to 'select' it looks at the 'open select
alternatives'. If the Buffer is empty, that would be just Put; if not,
they would be Get and Put. It then (under the hood!) checks to see if
any task is waiting on any of the open select alternatives; if there are
any, it chooses one and executes the accept statement; if there are
none, it sets up a conditional event of some sort involving any of the
open select alternatives and waits.
Note that nothing will happen if Buffer.Is_Empty changes during this
wait; the select alternatives are only evaluated at the 'select'.
http://en.wikibooks.org/wiki/Ada_Programming/Tasking#Selective_Wait
http://en.wikibooks.org/wiki/Ada_Programming/Tasking#Guards
next prev parent reply other threads:[~2011-12-13 18:24 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-10 20:43 Interrupts handling in ADA Ada @ BRL
2011-12-10 21:13 ` Vinzent Hoefler
2011-12-10 22:09 ` Niklas Holsti
2011-12-10 22:27 ` Simon Wright
2011-12-11 20:21 ` Martin Dowie
2011-12-13 13:51 ` Ada BRL
2011-12-13 23:18 ` Martin Dowie
2011-12-13 14:11 ` Niklas Holsti
2011-12-13 14:54 ` Simon Wright
2011-12-13 15:06 ` Ada BRL
2011-12-13 21:49 ` Niklas Holsti
2011-12-13 23:18 ` Martin Dowie
2011-12-13 12:47 ` Ada BRL
2011-12-13 15:07 ` Simon Wright
2011-12-13 15:23 ` Ada BRL
2011-12-13 18:14 ` Simon Wright
2011-12-13 18:56 ` Ada BRL
2011-12-13 19:56 ` Bill Findlay
2011-12-13 22:15 ` Niklas Holsti
2011-12-13 15:34 ` Simon Wright
2011-12-13 17:55 ` Ada BRL
2011-12-13 18:18 ` Dmitry A. Kazakov
2011-12-13 19:01 ` Ada BRL
2011-12-13 19:58 ` Dmitry A. Kazakov
2011-12-13 18:24 ` Simon Wright [this message]
2011-12-11 0:15 ` Jeffrey Carter
2011-12-13 12:53 ` Ada BRL
2011-12-11 9:23 ` Dmitry A. Kazakov
2011-12-13 13:11 ` Ada BRL
2011-12-13 14:04 ` Dmitry A. Kazakov
2011-12-13 14:51 ` Ada BRL
2011-12-13 15:02 ` Ada BRL
2011-12-13 15:39 ` Dmitry A. Kazakov
2011-12-13 18:51 ` Ada BRL
2011-12-13 19:51 ` Dmitry A. Kazakov
2011-12-13 23:32 ` georg bauhaus
2011-12-11 12:04 ` Georg Bauhaus
2011-12-13 14:08 ` Ada BRL
2011-12-12 3:19 ` anon
2011-12-12 9:12 ` Niklas Holsti
2011-12-13 13:36 ` Ada BRL
2011-12-12 15:23 ` björn lundin
2011-12-13 13:38 ` Ada BRL
2011-12-13 13:56 ` Ludovic Brenta
2011-12-13 14:10 ` Ada BRL
2011-12-13 13:31 ` Ada BRL
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox