parallel
    Handyman via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Thu Nov  5 12:30:05 PST 2015
    
    
  
import std.stdio;
import core.thread;
import std.datetime;          // for stopwatch
import std.parallelism;
void say(string s) {          // write and flush
    writeln(s);
    stdout.flush();
}
struct Dish {
    string name;
    void prepare() {
       say("Start with the " ~ name ~ ".");
       Thread.sleep(1.seconds); // kunstmatig tijd verbruiken
       say("Finished the " ~ name ~ ".");
    }
}
void main() {
    auto dishes = [ Dish("soup"), Dish("sauce"), Dish("fries"), 
Dish("fish"), Dish("ice") ];
    auto sw = StopWatch(AutoStart.yes);
    foreach (dish; parallel(dishes, 1)) dish.prepare();
    sw.stop;
    writefln("Diner is ready.  Cooking took %.3f seconds.", 
cast(float) sw.peek.msecs / 1000);
}
gives:
Start with the soup.
Start with the sauce.
Start with the fries.
Start with the fish.
Finished the sauce.
Finished the fries.
Start with the ice.
Finished the soup.
Finished the fish.
Finished the ice.
Diner is ready.  Cooking took 1.999 seconds.
Seems that 4 cores go all out on first 4 dishes, then 1 core 
deals with the last dish.  With 4 cores I expect diner is ready 
after 5/4 = 1.25 secs though.  What did I do wrong?
    
    
More information about the Digitalmars-d-learn
mailing list