假设我有一些全局变量和一些线程局部变量在模块的静态 this() 中被初始化(例如, TLS a
、 global b
、 TLSc
和 globald
按顺序初始化)并在其静态 ~this() 中取消初始化。
有人可以指导我完成程序在单线程和多线程应用程序中初始化变量所采取的步骤吗?
或者如果我做出了一个非常可怕的假设,请纠正我?
编辑:为了让它更清楚一点:
module mymodule;
int a;
__gshared int b;
int c;
__gshared d;
static this()
{
a = 2; b = 3; c = 4; d = 1337;
}
static ~this()
{
if(a == 2)
dosomefunc(b);
// and other nonsensical things that involve branching on the TLS and using the globals.
}
当我在某个生成的线程中更改 a 的值,但从未在主线程中触摸它时会发生什么?dosomefunc()
曾经被叫过吗?这里应该有什么实际行为,该行为依赖于什么?关于 TLS,如何调用模块初始化程序?它们是否只被调用一次,并且 TLS 变量得到了超出一些值初始化的轴?这两个(去)初始化器到底是什么意思?