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