On Tue, 21 Sep 2010 05:17:10 -0400, Lutger <[email protected]> wrote:

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?

idup is not safe (along with dup), it is the equivalent of a cast right now. You must still ensure the data has no aliases, or the data idup'd consists of all value types.

See this bug report: http://d.puremagic.com/issues/show_bug.cgi?id=3550


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

This used to be the only valid way to get immutable data besides idup.

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?

TLS is only for global and static variables.  Data on the heap is not TLS.

-Steve

Reply via email to