On Saturday, 9 May 2015 at 18:41:59 UTC, bitwise wrote:
What does 'shared' do to member variables?

Makes them `shared`. :P

It makes sense to me to put it on a global variable, but what sense does it make putting it on a member of a class?

Globals are not the only way to pass data to other threads. E.g., you can std.concurrency.send a shared Object:

----
import core.thread: thread_joinAll;
import std.concurrency;
class C {int x;}
void main()
{
    auto c = new shared C;
    c.x = 1;
    auto tid = spawn(() {
        receive(
            (shared C c) {c.x = 2;}
        );
    });
    send(tid, c);
    thread_joinAll();
    assert(c.x == 2);
}
----

That shared C could come from a class/struct member, of course.

What happens if you try to access a member of a class/struct instance from another thread that is not marked 'shared'?

I think you're not supposed to be able to do that.

Reply via email to