On 7/8/15 5:20 AM, wobbles wrote:
After reading the recent "Lessons Learned" article [1], and reading a
few comments on the thread, there was a mention of using __gshared over
shared.
I don't see any full answers to this so:
What exactly is the difference here?
__gshared just puts the data in global segment, but does NOT alter the
type. shared DOES alter the type:
__gshared int x1;
shared int x2;
pragma(msg, typeof(x1)); // int
pragma(msg, typeof(x2)); // shared(int)
Why is this important? Because you can overload on shared data to do
special things (i.e. reject pointers to shared data, or use mutex locks
around only truly shared data). __gshared data is only strictly a
storage class, so you cannot do anything different with e.g. &x1 as you
could with an address to a normal thread-local int.
As has been mentioned, __gshared data more accurately represents how C
treats global data, but technically, you could use C to access shared
variables. Both would have to be tagged with extern(C).
Is there plans to 'converge' them at some point?
No, they are different concepts.
-Steve