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