Very limited shared promotion

Manu turkeyman at gmail.com
Mon Jun 17 23:46:44 UTC 2019


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?


More information about the Digitalmars-d mailing list