Very limited shared promotion

Manu turkeyman at gmail.com
Tue Jun 18 12:00:44 UTC 2019


On Tue, Jun 18, 2019 at 3:05 PM FeepingCreature via Digitalmars-d
<digitalmars-d at puremagic.com> wrote:
>
> 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?

Well, under my proposal, if the capture were actually qualified, it
wouldn't be possible to call another local function with a
lesser-qualified capture; so that's another +1 for qualifying the
capture! ;)


More information about the Digitalmars-d mailing list