On Thursday, 7 August 2014 at 18:33:40 UTC, H. S. Teoh via Digitalmars-d-learn wrote:
On Thu, Aug 07, 2014 at 06:23:24PM +0000, "Nordlöw" via Digitalmars-d-learn wrote:
What is the best way to forward a string[] as argument to a function
called through std.concurrency.spawn().

I need this in the following example where I start the vibe.d event
loop in the main thread (the only way I've managed to get
runEventLoop() to work) and run my other program logic in another which requires command line arguments to passed to the new thread.

void otherMain(string[] args)
{
    // use args
}

void main(string[] args)
{
    import std.concurrency: spawn;
auto otherMainTid = spawn(&otherMain, args); // this line fails
    runEventLoop();
}

The line calling spawn() fails as

/home/per/opt/x86_64-unknown-linux-gnu/dmd/linux/bin64/src/phobos/std/concurrency.d(442):
Error: static assert "Aliases to mutable thread-local data not allowed."

Maybe try args.idup instead?

But this shouldn't be necessary, right? It's a mutable slice to immutable data, but the slice is passed by value, so no mutable sharing takes place.

Reply via email to