What exactly shared means?

John Colvin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jan 2 11:47:50 PST 2015


On Friday, 2 January 2015 at 13:14:14 UTC, Jonathan M Davis via 
Digitalmars-d-learn wrote:
> Objects in D default to being thread-local. __gshared and 
> shared both make
> it so that they're not thread-local. __gshared does it without 
> actually
> changing the type, making it easier to use but also dangerous 
> to use,
> because it makes it easy to violate the compiler's guarantees, 
> because it'll
> treat it like a thread-local variable with regards to 
> optimizations and
> whatnot.

I'm pretty sure that's not true. __gshared corresponds to C-style 
globals, which are *not* assumed to be thread-local (see below).

>
> shared does not add any more synchronization or automatic 
> mutex-locking or
> anything like that than __gshared does (IIRC, there is some 
> talk in TDPL
> about shared adding memory barriers - which __gshared wouldn't 
> do - but that
> hasn't been implemented and probably never would be, because it 
> would be too
> expensive with regards to efficiency). However, unlike 
> __gshared, shared
> _does_ alter the type of the variable, so the compiler will 
> treat it
> differently. That way, it won't do stuff like optimize code 
> under the
> assumption that the object is thread-local like it can do with 
> non-shared
> objects.

Are you sure about all this optimisation stuff? I had (perhaps 
wrongly) assumed that __gshared and shared variables in D 
guaranteed Sequential Consistency for Data Race Free (SCDRF) and 
nothing more, just like all normal variables in C, C++ and Java.

Thread-local variables (i.e. everything else in D ) could in 
theory be loosened up to allow some *extra* optimisations that 
C/C++/Java etc. don't normally support (because they would risk 
violating SCDRF), but I don't know how much of this is taken 
advantage of currently.

If I'm correct, then the advice to users would be "Use __gshared 
and pretend you're writing C/C++/Java, or use shared and do 
exactly the same but with type-system support for your 
convenience/frustration".


More information about the Digitalmars-d-learn mailing list