On Fri, 2007-10-26 at 07:58 -0700, Ian Lance Taylor wrote:
> skaller <[EMAIL PROTECTED]> writes:
> 
> > As I understand it volatile is typically used as a 'hint'
> > to the compiler that there could be aliases it cannot see.
> > This is independent of the use suggesting asynchronous changes
> > in a hardware port for example, although the effect is the same.
> 
> Not really.  Volatile has a reasonably precise definition: it means
> that memory accesses must be done precisely as they are written in the
> program.  They may not be coalesced, and they may not be moved.

I understand that's the common meaning .. but the semantics
aren't specified for ISO C/C++.


> > And in effect that means ALL variables must be synchronised,
> > unless the compiler is exceedingly smart!
> 
> No, it means that the implementation of mutex must be magic.

Same thing isn't it?

> 
> > [BTW I think this sucks, the need to synchronise ALL memory
> > on mutexing is far too heavy]
> 
> It can not be avoided, for the reasons you describe.

Of course it can be avoided easily if the memory model
allowed for local synchronisation sets, so the real problem
appears to be that Posix doesn't provide proper synchronisation
control.

I guess that's why 'volatile' appears attractive: one *might*
say that accesses to volatiles are atomic and ordered, without
implying anything about other memory (I'm not suggesting that,
just commenting that it would provide a way to reduce synchronisation
burden). I.e. a volatile variable acts as a kind of 'port' between
threads which act like 'processes'.

In fact, volatiles mapped onto hardware registers fronting async
devices really ARE doing just that.

-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net

Reply via email to