Hi Charles,

would the following work (just a shot in the dark) ?

//---
module test;

import std.stdio;
import std.concurrency;

void spawnedFuncFoo(Tid tid, Tid tidBar) {
     receive(
         (int i) {
             writeln("Foo Received the number ", i);
             send(tidBar, i, thisTid);
             auto barSuccessful = receiveOnly!(string);
             writeln("Bar got my (Foo) message");
         }
     );

     send(tid, true);
}

void spawnedFuncBar(Tid tid) {
     receive(
         (int i, Tid tidFoo) {
             writeln("Foo passed me (Bar) the number ", i);
             send(tidFoo, "done");
         }
     );

     receive(
         (string sig) {
             writeln("Main says I'm (Bar) done.");
             send(tid, 42);
         }
     );
}

void main() {
     auto tidBar = spawn(&spawnedFuncBar, thisTid);
     auto tidFoo = spawn(&spawnedFuncFoo, thisTid, tidBar);
     send(tidFoo, 42);
     auto fooWasSuccessful = receiveOnly!(bool);
     assert(fooWasSuccessful);

     send(tidBar, "your done");
     auto barWasSuccessful = receiveOnly!(int);
     assert(barWasSuccessful == 42);
     writeln("Successfully had two separate threads communicate
with each other");
}
//---

Reply via email to