std.concurrency.spawn does not accept delegates
Jonathan M Davis
jmdavisProg at gmx.com
Mon Jul 18 09:06:46 PDT 2011
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.ubuntu at 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
More information about the Digitalmars-d-learn
mailing list