Is comparison of shared data thread-safe?

bauss jacobbauss at gmail.com
Fri Mar 17 12:47:03 UTC 2023


On Thursday, 16 March 2023 at 12:32:34 UTC, Nick Treleaven wrote:
> With -preview=nosharedaccess, I get:
>
>     int y = 2;
>     shared int x = y; // OK
>
>     assert(x == 2); // no error
>     y = x; // error
>
> So for the assignment to y, reading x is an error and 
> atomicLoad should be used instead. But is it an oversight that 
> reading x in the assert is not an error?
>
> I have also found this in a unittest in core.atomic:
>
>         shared(size_t) i;
>
>         atomicOp!"+="(i, cast(size_t) 1);
>         assert(i == 1);
>
> Is the assert somehow thread-safe?

I think it __should__ be fine since `i` cannot be in a state 
where it gets modified and read at the same time.




More information about the Digitalmars-d-learn mailing list