Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import std.stdio;
- import std.range;
- import std.algorithm;
- import std.conv;
- import std.parallelism;
- import core.thread;
- T mySum(T)(T[] values) {
- auto taskPool = new TaskPool(2);
- auto partialSums = taskPool.workerLocalStorage(T.init);
- foreach (value; taskPool.parallel(values)) {
- partialSums.get = partialSums.get + value;
- Thread.sleep(1.msecs);
- }
- taskPool.finish();
- auto result = T.init;
- foreach (partialSum; partialSums.toRange) {
- result = result + partialSum;
- }
- return result;
- }
- struct MyString {
- string str;
- MyString opBinary(string OP)(in MyString that) if (OP == "+") {
- return MyString(this.str ~ that.str);
- }
- }
- void main() {
- foreach (i; 0 .. 10) {
- writeln(mySum(iota(10).array()));
- }
- foreach (i; 0 .. 10) {
- writeln(mySum(iota(10).map!(n => MyString(n.text())).array()));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement