Does anyone understand how to use "shared" types with concurrency send/receive functions?
via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Aug 14 02:51:16 PDT 2017
On Monday, 14 August 2017 at 03:59:48 UTC, Jonathan M Davis wrote:
> [snip]
>
> Now, the fact that the mutex objects don't handle shared
> correctly is another issue entirely. Having to cast away shared
> from mutexes is dumb, because you're obviously not going to be
> protecting them with a mutex, and their operations have to be
> atomic anyway for them to do what they do. So, that definitely
> needs to be fixed. However, I believe that it _has_ been fixed
> in master, and it might have made it into a release now, but
> I'm not sure. So, core.sync.mutex.Mutex _should_ now be useable
> as shared like it should be.
>
My fixes for shared(Mutex) -
https://github.com/dlang/druntime/pull/1728 - are part of the DMD
v2.074.0 release, and should propagate to LDC with their 1.4
release respectively. GDC master now at druntime/phobos 2.074.1 -
https://github.com/D-Programming-GDC/GDC/pull/539 and they're in
the process of moving to 2.075.0 -
https://github.com/D-Programming-GDC/GDC/pull/542.
Unfortunately, I forgot to write a changelog entry when I was
working on the PR and later didn't have time to do so, before the
2.074.0 release.
So shared (Mutex) should be in good shape now. I should
supplement the ddoc unittest to address the transitive you issues
you talked about. Currently it only shows synchronized use of a
plain value type without indirections, which is uninteresting.
The example I'm thinking about is casting with HeadUnsharedOf /
TailSharedOf a pointer to a singly-linked list, because with
pointers you could show the shared(Node*) -> shared(Node)*
transition in the type system, which unfortunately can't be
demonstrated with implicitly reference types (classes).
Speaking of TailSharedOf, Jonathan could take a look at this PR:
https://github.com/dlang/druntime/pull/1605? I and Andrei already
approved it, but I'd like to get a third opinion since this is a
breaking change and Martin seems be too busy the moment.
More information about the Digitalmars-d-learn
mailing list