Thread overview
Passing a instance of a class to a thread via spawn?
Jun 29, 2013
Gary Willoughby
Jun 29, 2013
Ali Çehreli
Jun 30, 2013
Gary Willoughby
June 29, 2013
I want to spawn a few worker threads to do some processing but i want the spawned function to have access to a shared object. How do i accomplish this?

I'm currently passing it as a parameter and getting the error: "Aliases to mutable thread-local data not allowed."
June 29, 2013
On 06/29/2013 01:35 PM, Gary Willoughby wrote:
> I want to spawn a few worker threads to do some processing but i want
> the spawned function to have access to a shared object. How do i
> accomplish this?
>
> I'm currently passing it as a parameter and getting the error: "Aliases
> to mutable thread-local data not allowed."

You must pass a shared object:

import std.stdio;
import std.concurrency;
import core.thread;

class C
{
    void foo_shared() shared
    {}

    void bar_notshared() const
    {}
}

void worker(shared(C) c)
{
    c.foo_shared();

    // Does not compile:
    // c.bar_notshared();
}

void main()
{
    auto c = new shared(C)();

    spawn(&worker, c);

    thread_joinAll();
}

Ali

June 30, 2013
> You must pass a shared object:

Thanks!