RosettaCodeData/Task/Checkpoint-synchronization/D/checkpoint-synchronization.d

25 lines
743 B
D

import std.stdio;
import std.parallelism: taskPool, defaultPoolThreads, totalCPUs;
void buildMechanism(uint nparts) {
auto details = new uint[nparts];
foreach (i, ref detail; taskPool.parallel(details)) {
writeln("Build detail ", i);
detail = i;
}
// This could be written more concisely via std.parallelism.reduce,
// but we want to see the checkpoint explicitly.
writeln("Checkpoint reached. Assemble details ...");
uint sum = 0;
foreach (immutable detail; details)
sum += detail;
writeln("Mechanism with ", nparts, " parts finished: ", sum);
}
void main() {
defaultPoolThreads = totalCPUs + 1; // totalCPUs - 1 on default.
buildMechanism(42);
buildMechanism(11);
}