I'm still a bit fuzzy on how to create immutable data and when said data is 
safe 
to share across threads.

To begin with, there is .idup, string literals and constructors of immutable 
objects. Those can be safely shared, no problem, right?

But then, the spec mentions casting to immutable is ok if you do not have any 
mutable aliases left (http://www.digitalmars.com/d/2.0/const3.html):

char[] s = ...;
immutable(char)[] p = cast(immutable)s.dup; // ok, unique reference

I do not understand how that works with sharing. Since immutable data is 
implicitly shared but the data that p refers to is allocated on the TLS, how 
can 
you share this? I always thought that threads do not have access to each others 
TLS at all?

Finally a practical question: when you have a data structure that is too 
complex 
to create in a constructor, want to create it and then make it immutable, what 
is the current way to go about this? If it is created by one thread, would it 
be 
ok to type it as __gshared, cast to immutable and then send a message to other 
threads? Is __gshared required in this case? 

Reply via email to