comp.lang.ada
 help / color / mirror / Atom feed
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 



  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