On Fri, 07 Jan 2011 09:24:18 -0500, Adam Conner-Sax <adam_conner_...@yahoo.com> wrote:

So, I thought I sort of understood "shared" and now I think I don't.

If I have a class:

class foo {
  int x;
  static int y;
  shared static int z;

}

So x is one instance per class and is thread-local?
y is one instance per thread?
z is one instance per application, i.e., global?

Yes to all


If that's true (and I realize it might not be), and I want to initialize these
variables in constructors, how does that work?

I think

class foo {
...(as before)

this() { x = 2; } // ok

static this() { y = 3; } // is this called once per thread?

shared static this() { z = 3;} // also, okay, called before main
}

but I don't understand what happens with threads and the "static this"
constructor. How/when are the thread-local copies constructed? How do you
initialize/construct the thread-local static data?

static this() is run upon thread creation (and once at the beginning of the program for the main thread), and static ~this() is run when a thread is destroyed.

All static this() and shared static this() functions are assembled by the runtime into an array of constructors, built in the correct order based on import dependencies. So each time a thread starts, it simply goes through an array and calls each function.

-Steve

Reply via email to