Advertisement
Guest User

Untitled

a guest
Aug 6th, 2015
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 0.92 KB | None | 0 0
  1. import std.stdio;
  2. import std.range;
  3. import std.algorithm;
  4. import std.conv;
  5. import std.parallelism;
  6.  
  7. import core.thread;
  8.  
  9. T mySum(T)(T[] values) {
  10.     auto taskPool = new TaskPool(2);
  11.     auto partialSums = taskPool.workerLocalStorage(T.init);
  12.     foreach (value; taskPool.parallel(values)) {
  13.         partialSums.get = partialSums.get + value;
  14.         Thread.sleep(1.msecs);
  15.     }
  16.     taskPool.finish();
  17.  
  18.     auto result = T.init;
  19.     foreach (partialSum; partialSums.toRange) {
  20.         result = result + partialSum;
  21.     }
  22.  
  23.     return result;
  24. }
  25.  
  26. struct MyString {
  27.     string str;
  28.  
  29.     MyString opBinary(string OP)(in MyString that) if (OP == "+") {
  30.         return MyString(this.str ~ that.str);
  31.     }
  32. }
  33.  
  34. void main() {
  35.     foreach (i; 0 .. 10) {
  36.         writeln(mySum(iota(10).array()));
  37.     }
  38.     foreach (i; 0 .. 10) {
  39.         writeln(mySum(iota(10).map!(n => MyString(n.text())).array()));
  40.     }
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement