You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
struct Bob
{
void setThing() shared;
}
As I understand, `shared` attribution intends to guarantee that I dun
synchronisation internally.
This method is declared shared, so if I have shared instances, I can
call it... because it must handle thread-safety internally.
void f(ref shared Bob a, ref Bob b)
{
a.setThing(); // I have a shared object, can call shared method
b.setThing(); // ERROR
}
The method is shared, which suggests that it must handle thread-safety. My instance `b` is NOT shared, that is, it is thread-local.
A method that handles thread-safety doesn't not work when it's only accessed from a single thread.
mutable -> shared should work the same as mutable -> const... because surely that's safe?
The text was updated successfully, but these errors were encountered:
Conversation: https://github.com/dlang/dmd/pull/8782
Reveals that `scope` is also necessary to guarantee that the promoted reference does not escape.
Promotion is safe so long as no promoted-reference outlives the call where the instance was promoted.
struct Bob
{
void setThing() shared scope;
}
void f(ref shared Bob a, ref Bob b)
{
a.setThing(); // I have a shared object, can call shared method
b.setThing(); // this should work with `scope`
}
Manu reported this on 2018-10-01T04:13:20Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=19279
Description
struct Bob { void setThing() shared; } As I understand, `shared` attribution intends to guarantee that I dun synchronisation internally. This method is declared shared, so if I have shared instances, I can call it... because it must handle thread-safety internally. void f(ref shared Bob a, ref Bob b) { a.setThing(); // I have a shared object, can call shared method b.setThing(); // ERROR } The method is shared, which suggests that it must handle thread-safety. My instance `b` is NOT shared, that is, it is thread-local. A method that handles thread-safety doesn't not work when it's only accessed from a single thread. mutable -> shared should work the same as mutable -> const... because surely that's safe?The text was updated successfully, but these errors were encountered: