Checkpoint synchronization: Difference between revisions

Add D variant
(Undo revision 148001 by Avillen (change in code resulted in wrong results))
(Add D variant)
Line 303:
return 0;
}</lang>
 
=={{header|D}}==
 
<lang d>
import std.parallelism: taskPool, defaultPoolThreads, totalCPUs;
import std.stdio: writeln;
 
void buildMechanism(uint nparts) {
auto details = new uint[nparts];
foreach (uint i, ref detail; taskPool.parallel(details)) {
writeln("Build detail ", i);
detail = i;
}
/* this function 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 (ref detail; details) {
sum += detail;
}
writeln("Mechanism with ", nparts, " parts finished: ", sum);
}
 
void main() {
defaultPoolThreads = totalCPUs+1; /* totalCPUs-1 is default */
buildMechanism(42);
buildMechanism(11);
}
</lang>
 
Example output:
 
<pre>
Build detail 0
Build detail 2
Build detail 6
Build detail 3
Build detail 8
Build detail 10
Build detail 4
Build detail 5
Build detail 7
Build detail 9
Build detail 1
Checkpoint reached. Assemble details ...
Mechanism with 11 parts finished: 55
</pre>
 
=={{header|E}}==
Anonymous user