On Monday, 8 August 2022 at 17:45:03 UTC, bauss wrote:
On Monday, 8 August 2022 at 13:55:02 UTC, ag0aep6g wrote:
auto x = s.x;
```
Your problem is here and not because it was __gshared.
You're copying the value and obviously it can be changed in the
meantime, that's common sense.
You shouldn't use it like that. You should access s.x directly
instead.
kdevel has already addressed this.
And in the case of shared it can leave the same result if the
reading thread locks first then it will read and process the
value before it's changed.
You're right that `shared` doesn't fix the race condition.
Without `-preview=nosharedaccess`, there is no difference at all.
So you might as well use `shared` ;)
But with `-preview=nosharedaccess`, the code no longer compiles,
and you're forced to think about how to access the shared data
safely. Which is good.
So: Never ever use `__gshared`, and always use
`-preview=nosharedaccess`.