Very limited shared promotion

FeepingCreature feepingcreature at gmail.com
Tue Jun 18 05:04:58 UTC 2019


On Monday, 17 June 2019 at 23:46:44 UTC, Manu wrote:
> Is this valid?
>
> int x;
> void fun(scope ref shared(int) x) { ... }
> fun(x); // implicit promotion to shared in this case
>
> This appears to promote a thread-local to shared. The problem 
> with such promotion is that it's not valid that a thread-local 
> AND a shared reference to the same thing can exist at the same 
> time.
>
> With scope, we can guarantee that the reference doesn't escape 
> the callee.
> Since the argument is local to the calling thread, and since the
> calling thread can not be running other code at the same time 
> as the
> call is executing, there is no way for any code to execute with 
> a
> thread-local assumption while the callee makes shared 
> assumptions.
>
> I think this might be safe?

Can `fun` execute a call to another nested function that accesses 
`x` unshared?


More information about the Digitalmars-d mailing list