On Thu, 2005-04-14 at 23:33 +0200, Jason Merrill wrote:
> On Thu, 14 Apr 2005 15:47:44 -0500, Robert Dewar <[EMAIL PROTECTED]> wrote:
> > [Ada standard]
> 
> Yep, sounds a lot like C/C++: volatile reads and writes are required to
> have sequential ordering relative to each other, but (outside the current
> thread) they are not ordered relative to non-volatile reads and writes.

Here's an extract from section 9.10 ("sequential"):

15.a
Ramification: If two actions are ``sequential'' it is known that their 
executions
don't overlap in time, but it is not necessarily specified which occurs first. 
For
example, all actions of a single task are sequential, even though the exact 
order
of execution is not fully specified for all constructs. 
15.b
Discussion: Note that if two assignments to the same variable are sequential, 
but
neither signals the other, then the program is not erroneous, but it is not 
specified
which assignment ultimately prevails. Such a situation usually corresponds to a
programming mistake, but in some (rare) cases, the order makes no difference, 
and for
this reason this situation is not considered erroneous nor even a bounded 
error. In
Ada 83, this was considered an ``incorrect order dependence'' if the ``effect'' 
of the
program was affected, but ``effect'' was never fully defined. In Ada 95, this 
situation
represents a potential nonportability, and a friendly compiler might want to 
warn the
programmer about the situation, but it is not considered an error. An example 
where
this would come up would be in gathering statistics as part of referencing some
information, where the assignments associated with statistics gathering don't 
need to
be ordered since they are just accumulating aggregate counts, sums, products, 
etc.

Ciao,

Duncan.

Reply via email to