volatile qualifier hurts single-threaded optimized case
Paolo Carlini
pcarlini@suse.de
Wed Aug 30 09:42:00 GMT 2006
Benjamin Kosnik wrote:
>>> static inline _Atomic_word
>>> __attribute__ ((__unused__))
>>>- __exchange_and_add_dispatch(volatile _Atomic_word* __mem, int __val)
>>>+ __exchange_and_add_dispatch(_Atomic_word* __mem, int __val)
>>>
>>>
>>>
>>>
>>Agreed, but doing this means that in the improvements to rope that
>>Richard (and Hans) also want we have to call __exchange_and_add and
>>__atomic_add directly, because in that case the involved memory
>>locations are volatile and have to remain like that per Hans desiderata,
>>I gather.
>>
>>
>I find this somewhat confusing, but am going to go ahead with this, as
>I have other fixes in the pipeline for this file.
>
>
Agreed, agreed. I was just pointing out, for completeness, that we had a
very long discussion thread, Hans also participating: in that thread
Richard proposed to change rope to use the atomic functions and prepared
a patch. Hans was very happy with that patch besides the delicate point
that, because of races in some cases (i.e., accesses to the atomic
memory *not* using the primitives for performance reasons) the involved
memory had to remain volatile for now, to be more safe. Then, the
dispatchers could not be used...
Paolo.
More information about the Libstdc++
mailing list