core.sync.rwmutex example
    Joshua Niehus via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Fri May  9 14:51:01 PDT 2014
    
    
  
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");
}
//---
    
    
More information about the Digitalmars-d-learn
mailing list