On Monday 18 July 2011 15:55:52 teo wrote:
> On Mon, 18 Jul 2011 10:26:27 -0400, Steven Schveighoffer wrote:
> > On Sun, 17 Jul 2011 15:29:02 -0400, teo <teo.ubu...@yahoo.com> wrote:
> >> It looks like std.concurrency.spawn does not accept delegates. Is
> >> there
> >> any reason for that?
> > 
> > There is no type attached to the hidden 'this' pointer.  So spawn cannot
> > guarantee it doesn't point to unshared data.
> > 
> > -Steve
> 
> Bad. I tried to pass as an argument a pointer to an instance of a class -
> a this pointer. That didn't work.

Only stuff that's immutable or implicitly convertible immutable can be passed 
across threads using spawn and send. Otherwise, there's a risk of it ending up 
getting altered by both threads (or altered by one when the other one is using 
at it). Sometimes, that can be a bit restrictive (particularly when you _know_ 
that something isn't going to be altered by the thread sending it after its 
sent but the compiler doesn't), but it avoids all kinds of problems. If you 
want to send a class object across, then it needs to be immutable (which tends 
to be a bit of a pain to do for classes, since they need to have an immutable 
constructor, which is often a pain to do).

- Jonathan M Davis

Reply via email to