On 02.07.2017 15:48, Andrei Alexandrescu wrote:
On 07/02/2017 09:39 AM, Timon Gehr wrote:
In general, depending on the hardware memory model and the language
memory model, data transfer from one thread to another requires
cooperation from both parties. We don't want the thread that has the
unshared data to need to participate in such a cooperation.
Yes, there must be a handshake. Oh, I see your point. Let me illustrate:
void fun(const shared int* p1)
{
auto a = atomicLoad(p1);
...
}
void gun()
{
int* p = new int;
shared const int* p1 = p; // assume this passes
spawn(&fun, p);
*p = 42; // should be a shared write, it's not
}
Is this what you're referring to?
...
Yes, precisely.
So it seems like the hierarchy in http://erdani.com/conversions.svg is
minimal?
Yes, I think there is no way to collapse it without bad consequences.