Concurrency Confusion
Dicebot via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Aug 4 01:35:09 PDT 2015
import std.concurrency;
import std.typecons : Unique;
import std.exception : assumeUnique;
struct Foo { }
struct Bar { }
void bar_generator (Tid ownerTid)
{
receive(
(shared(Foo)* input) {
auto output = new Bar[100];
// compute output ..
// .. and cast to immutable via assumeUnique when
// finished as it won't be mutated anymore and no
// other pointers exist
send(ownerTid, assumeUnique(output));
}
);
}
void main ()
{
auto generator = spawn(&bar_generator, thisTid);
// must be shared or immutable to be passed between threads
auto input = new shared Foo;
send(generator, input);
// in real app use `receiveTimeout` to do useful stuff until
// result message is received
auto output = receiveOnly!(immutable(Bar)[]);
import std.stdio;
writeln(output.length);
}
More information about the Digitalmars-d-learn
mailing list