module initialization order issue
Peter Alexander
peter.alexander.au at gmail.com
Sun Mar 3 15:27:13 PST 2013
On Sunday, 3 March 2013 at 16:07:58 UTC, Benjamin Thaut wrote:
> Am 03.03.2013 16:29, schrieb Peter Alexander:
>> On Sunday, 3 March 2013 at 12:01:10 UTC, Benjamin Thaut wrote:
>>> Is this a bug, or is this intended beahvior? I always
>>> believed that
>>> with all the dependency detenction that is done such
>>> situation should
>>> not happen.
>>
>> It's intended behaviour.
>>
>> Remember that shared static this() is only run once for the
>> whole
>> program, whereas static this() is run per thread. Using
>> per-thread data
>> inside something that's run per-program doesn't make a whole
>> lot of sense.
>
> Well this is of course a reduced version of a real issue I'm
> having. I have thread local stack allocators. Each thread has
> its own stack allocator and certain parts of my code use these.
> What happened now is, that I inserted a call into a shared
> static module constructor which calls a function which in turn
> uses a thread local stack allocator. The problem is, that the
> thread local stack allocator module is not fully initialized at
> that point.
>
> But I think I can work around it by adding a shared static
> constructor and initialize the thread local stack alloactor for
> the main thread there.
It's a tricky situation. There are bad situations no matter which
order things happen.
At least the order is defined. Having this kind of thing break in
non-deterministic ways would be a lot less fun.
More information about the Digitalmars-d
mailing list