說我有,有一個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