On 11/10/2011 01:06 PM, Ruslan Mullakhmetov wrote:
Hi folks,

I need to create thread and pass to it array of objects wich will no
longer use in main thread.

The problem is that spawn only accepts immutables and i have no idea how
to tell him that i transfer full ownership of the data to child thread.

the code:

import std.concurrency;

class Foo
{

}

void worker( Foo[] data )
{
//...
}

void main()
{
auto data = new Foo[10];
spawn( &worker, data );
}


P.S. I do need to create data in main thread and distribute it to child
threads.


I haven't tested these at runtime, but they compile:

1) (This is not actually what you want, as you want to mutate the array further in the worker.)

Take array as 'immutable' and use assumeUnique (I don't know why it's a part of std.exception :)):

import std.exception;
import std.concurrency;

class Foo
{

}

void worker( immutable(Foo)[] data )
{
    //...
}

void main()
{
    auto data = new Foo[10];
    spawn( &worker, assumeUnique(data) );
}

2) Make data 'shared' and take the responsibility of ownership and sharing:

import std.exception;
import std.concurrency;

class Foo
{

}

void worker( shared(Foo)[] data )
{
    //...
}

void main()
{
    auto data = new shared(Foo)[10];
    spawn( &worker, data );
}

Ali

Reply via email to