说我有,有一个DLL以下静态/全球:调用LoadLibrary静态/全局和线程
ClassA Object;
随着ClassA的实施,还包含了“常规” ClassB的,这将无法正常工作如果ClassA尚未构造(这就是为什么我使ClassA成为静态/全局的原因)。
在Windows中,我相信DLL加载器会在调用ClassB的构造函数时加载这个DLL,对吗?此时,ClassA将被构建,然后ClassB的构建将随之进行。如果第二个线程出现并构造ClassB,ClassA将不会被构建,因为它已经被构建。
现在,我的问题是 - 如果ClassB是由两个线程同时构建的。所以线程1将开始构建ClassA。在执行ClassB的构造函数之前,线程2是否等待ClassA完全构造?
换句话说,LoadLibrary()是否使用CriticalSection来确保DLL的静态/全局变量的线程安全初始化?我的预感是'是',但我似乎无法找到任何文件说某种方式或其他。
谢谢 - 这与我解释DllMain文档暗示的内容一致,但我很欣慰地发现别人与我的解释一致。 – 2009-12-28 05:00:32