Question on volatile functions and GCC
Tobias Burnus
burnus@net-b.de
Tue Mar 5 10:14:00 GMT 2013
Jonathan Wakely wrote:
> On 5 March 2013 09:27, David Paterson wrote:
>>
>> In addition to Jonathan's answer on the use of "volatile", it's worth adding
>> that it's not only used for memory mapped hardware. There are many other
>> uses, such as inter-thread communication, or indeed the example you
>> show below.
>
> Only in broken code.
>
> volatile is not for multithreading, you need proper synchronization
> for interthread communication.
Maybe he meant something like using volatile to prevent code moves with
asynchronous communication (be it I/O or communication with libraries
like MPI, or also call to some functions, which internally invoke some
kind of synchronization.)
However, if I understand it correctly, GCC doesn't do such code moves*
and C/C++ also does not allow them – even not without "volatile". That's
different to Fortran, which allows for some code moves across procedure
calls; hence, Fortran has – additionally to "volatile" – the
"asynchronous" attribute to prevent those.
Tobias
* Side note: See PR49733 which tracks a case, where for Fortran code the
lack of the asynchronous attribute is not used for optimizations.
More information about the Gcc-help
mailing list