On Thu, Oct 18, 2018 at 3:10 PM Simen Kjærås via Digitalmars-d
<digitalmars-d@puremagic.com> wrote:
>
>
> Now, Two very good points came up in this post, and I think it's
> worth stating them again, because they do present possible issues
> with MP:

It is easy to respond to these.

> 1) How does MP deal with reorderings in non-shared methods?
>
> I don't know. I'd hide behind 'that's for the type implementor to
> handle', but it's a subtle enough problem that I'm not happy with
> that answer.

This is a red-herring. Opaque function calls are never reordered.
If they are inlined, the compiler has full visibility to the internal
machinery present.

If you call one function that performs an atomic op, then another that
performs an atomic op, it is impossible for the CPU to reorder atomic
op's around eachother, that would defeat the entire point of hardware
atomic operations.
If the functions used mutexes, or semaphores, exactly the same
applies; they are either function calls (not reordered), or they use
hardware primitives, which have scheduling fences.

If none of those things are present in the threadsafe functions, then
the functions aren't threadsafe in the first place!

In short, he made up this issue, it doesn't exist.

> 2) What about default members like opAssign and postblit?
>
> The obvious solution is for the compiler to not generate these
> when a type has a shared method or is taken as shared by a free
> function in the same module. I don't like the latter part of
> that, but it should work.

These aren't issues either. There's nothing wrong with atomic
assignment; you just have to implement an atomic assignment.
Postblit is being replaced with copy-ctor's and `shared` is one of the
explicit reasons why! Copy-ctor's are also fine, it would express an
atomic assignment.


This is just hot air, and only strengthen my conviction.

Reply via email to