On Thu, 14 Apr 2005 17:11:58 +0100, Nathan Sidwell <[EMAIL PROTECTED]> wrote:

> Jason Merrill wrote:

>> 7 Accessing  an  object  designated by a volatile lvalue (_basic.lval_),
>>   modifying an object, calling a library  I/O  function,  or  calling  a
>>   function that does any of those operations are all side effects, which
>>   are changes in the state of the execution environment.  Evaluation  of
>>   an expression might produce side effects.  At certain specified points
>>   in the execution sequence called sequence points, all side effects  of
>>   previous  evaluations  shall  be  complete  and  no  side  effects  of
>>   subsequent evaluations shall have taken place.7)
>> My reading of this is that currently, a volatile read or write should act
>> as a barrier to other writes ("modifying an object"), because generally
>> there will be a sequence point between those writes and the volatile
>> access.
>
> Could you clarify whether 'other writes' means 'other _volatile_ writes',
> or '_any_ other writes'?  Since non-volatile writes are not visible
> outside of the abstract machine, how can they be ordered wrt volatiles?

Any others.  I was basing that on the requirement that the side-effects of
those writes are required to be complete, though I suppose you could argue
that they aren't required to be visible outside the current thread.

> It seems to me that threads require barriers _within_ the abstract machine,
> and currently there is no mechanism to specify just that.  Volatile is all
> we have, and AFAICT those are only ordered WRT other volatile accesses
> separated by a sequence point.
>
> It appears to me that the proposal is providing more restrictions
> on volatile and other accesses, not fewer -- and cursorily that seems
> sane.

Yep.

Jason

Reply via email to