Why do core.atomic functions require shared

FeepingCreature feepingcreature at gmail.com
Thu Jul 5 11:31:15 UTC 2018


On Wednesday, 4 July 2018 at 10:47:12 UTC, Jonathan M Davis wrote:
> At this point, to operate on anything that's shared, either 
> means using atomics or protecting the data with a mutex (be 
> that with a synchronized block / function or a mutex object) 
> and temporarily casting away shared while operating on the 
> data. Afterwards, the mutex is released, and at that point, 
> there should just be only shared references to the data. About 
> the only time that operating directly on a shared object then 
> makes sense is when it manages the atomics or mutex and 
> associated cast internally.
>
> ...
> It's a very difficult problem. Synchronized classes were 
> proposed in an attempt to solve it, but even if they were fully 
> implemented, they'd only help partially, because they can only 
> strip off the outermost layer of shared. In order for the 
> compiler to cast away shared for you, it has to be able to 
> guarantee that there are no unprotected references to that 
> data, and because D doesn't have any kind of ownership system 
> in the language, we don't have a clean way to do it.
>

Once we have DIP1000, can accessing shared class members in a 
synchronized class (optionally? implicitly?) result in scoped 
rvalues?


More information about the Digitalmars-d mailing list