简而言之,我希望在尽可能靠近 main()/DllMain() 开头的地方进行特定的静态初始化。在静态初始化期间最后调用的构造函数可能是可以接受的。
由于这几乎肯定是特定于编译器的实现,因此我特别希望使用可视化 C++ 编译器(VS 2010 及更高版本)来执行此操作。将来我可能需要在 GCC 和 Clang 中执行此操作,但这不是一个直接的问题。
长话短说,我在基础库中有一个对象,该对象被静态初始化并在其构造函数中创建一个线程。该线程依赖于我们无法控制的库中的其他静态初始化对象,因此它会导致静态初始化中的竞争条件。如果我可以暂停或避免创建线程,直到所有其他静态初始化完成,这应该可以解决问题(一个简单的 Sleep(5000) 可以避免这个问题,尽管这不是一个可靠的解决方案)。
我可以在 main() 函数中显式调用初始化函数,但这并不理想,因为我们有 20 多个使用该库的二进制文件,因此每个程序员都必须记住在每个二进制文件中运行初始化。如果可能的话,我宁愿把这个责任推给编译器。