gpt4 book ai didi

windows - LoadLibrary 静态/全局变量和线程

转载 作者:可可西里 更新时间:2023-11-01 10:30:29 25 4
gpt4 key购买 nike

假设我有一个具有以下静态/全局的 DLL:

ClassA Object;

随着 ClassA 的实现,它还包含一个“常规”ClassB,如果 ClassA 尚未构建,它将无法正常工作(这就是我将 ClassA 设为静态/全局的原因)。

在 Windows 中,我相信 DLL 加载器会在调用 ClassB 的构造函数时加载此 DLL,对吗?此时,将构建ClassA,然后再构建ClassB。如果第二个线程出现并构造了 ClassB,ClassA 将不会被构造,因为它已经被构造。

现在,我的问题是——如果 ClassB 是由两个线程同时构造的怎么办。于是Thread 1就会开始构造ClassA。线程 2 会等到 ClassA 完全构造完成后才执行 ClassB 的构造函数吗?

换句话说,LoadLibrary() 是否使用 CriticalSection 来确保 DLL 的静态/全局变量的线程安全初始化?我的直觉是“是的”,但我似乎找不到任何文档说明其中一种方式。

最佳答案

DllMain 由 Windows 加载程序调用,同时持有称为“加载程序锁”的内部临界区,因此您的静态构造函数将在 DLL_PROCESS_ATTACH 事件期间被调用,这只会发生一次,当您的 DLL 首次加载时。

关于windows - LoadLibrary 静态/全局变量和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com