I have a question to static constructors in D2 and with threads.

-LogManager.d-

import std.stdio;

final class LogManager
{
        private:
                static __gshared LogManager instance;
                
        public:
        
                static this()
                {
                        instance = new LogManager();
                        writefln("New LogManager instance created.");
                }
        
                static ~this()
                {
                        instance = null;
                }

                static LogManager opCall()
                {
                        return instance;
                }
}

-end-

As stated in the docs, the static constructor is supposed to be executed before main. However, over the course of my application, every time I use the LogManager in a new thread, the static constructor will be executed again. Afaik this means that I have one static instance per thread, which is not at all which I would expect, especially considering the fact that instance is declared as __gshared (fyi: shared doesn't make a difference either).

Is this a bug? If not, could someone explain why the behaviour is different?

Thanks, Max.

Reply via email to