Why do "const inout" and "const inout shared" exist?
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Sun Jul 2 06:29:09 PDT 2017
On 07/02/2017 09:07 AM, Timon Gehr wrote:
> On 02.07.2017 14:41, Andrei Alexandrescu wrote:
>> On 07/01/2017 07:55 PM, Timon Gehr wrote:
>>> On 02.07.2017 01:08, Andrei Alexandrescu wrote:
>>>> Vaguely related question: should "const" convert implicitly to
>>>> "const shared"? The intuition is that the latter offers even less
>>>> guarantees than the former so it's the more general type. See
>>>> http://erdani.com/conversions3.svg.
>>>>
>>>> That would be nice because we have "const shared" as the unique root
>>>> of the qualifier hierarchy.
>>>
>>> This means that there can be aliasing between an unqualified
>>> reference and a const shared reference. Therefore, you can have code
>>> that mutates unshared data while another thread is reading it.
>>>
>>> What should the semantics of this be?
>>>
>>> The only potential issue is that it could restrict code operating on
>>> unshared data because it needs to play nice in some way to allow
>>> consistent data to be read by another thread.
>>
>> Well const shared exists already with the semantics of "you can't
>> modify this and you must load it atomically to look at it". The
>> question is whether the conversion from const to const shared can be
>> allowed. -- Andrei
>
> If the data is not written atomically, how can it be loaded atomically?
Then you atomically load parts of it, the point being that the matter is
present in the type. I must not be understanding the question. -- Andrei
More information about the Digitalmars-d
mailing list