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?

Reply via email to