On Tuesday, 15 June 2021 at 06:39:24 UTC, seany wrote:
What am I doing wrong?
add a `writeln(c.length);` in your inner loop and consider the output. If you were always pushing to the end of c, then only unique numbers should be output. But I see e.g. six occurrences of 0, four of 8 ... Here's a non-solution: ```d import std; import core.sync.mutex; void main() { int[] a = [1, 2, 3, 4, 5, 6, 7, 8, 9]; int[] b = [11, 12, 13, 14, 15, 16, 17, 18]; int[] c; shared Mutex mtx = new shared Mutex(); foreach (aa; parallel(a)) { foreach (bb; parallel(b)) { mtx.lock_nothrow(); c ~= aa + bb; mtx.unlock_nothrow(); } } writeln(c); } ``` That solves the inconsistent access to c, but the parallelism is probably pointless. Real solutions might include 1. `c[i] = aa + bb;`, with a calculated unique i per assignment. 2. std.concurrency and message passing to build c? 3. using core.atomic for i?