On 11/10/2011 11:00 PM, Ruslan Mullakhmetov wrote:
On 2011-11-11 01:23:01 +0400, Timon Gehr said:

class Foo
{

}

void worker( shared(Foo[]) data_ )
{
Foo[] data = cast() data_; // this cast is valid because data_ is
never read from another thread after the cast
//...
}

void main()
{
{
auto data = new Foo[10];
spawn( &worker, cast(shared)data ); // this cast is valid because data
is an unique reference (therefore there are no unshared aliases)
} // the sole reference to data in the main thread dies -> it will
never be read from this thread again
}

Thank you too. Unfortunately i got compilation error

thread.d(16): Error: cannot implicitly convert expression (data_) of
type shared(Foo)[] to Foo[]




Interesting, apparently cast() does not remove shared. Sorry about that, use this (this time I tested it).

import std.concurrency;

class Foo
{

}

void worker( shared(Foo[]) data_ )
{
    auto data = cast(Foo[]) data_;
    //...
}

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



Reply via email to