Angenommen, ich habe eine DLL, die die folgenden statischen/globalen hat:
ClassA Object;
Zusammen mit der Implementierung von ClassA enthält sie auch eine "normale" ClassB, die nicht richtig funktioniert, wenn ClassA noch nicht konstruiert wurde (deshalb habe ich ClassA zu einer statischen/globalen Klasse gemacht).
Ich glaube, dass der DLL-Lader unter Windows diese DLL beim Aufruf des Konstruktors von ClassB lädt, richtig? Zu diesem Zeitpunkt wird ClassA konstruiert und dann folgt die Konstruktion von ClassB. Wenn ein zweiter Thread auftaucht und ClassB konstruiert, wird ClassA nicht konstruiert, da es bereits konstruiert wurde.
Meine Frage ist nun, was passiert, wenn KlasseB gleichzeitig von zwei Threads erstellt wird. Also beginnt Thread 1 mit der Konstruktion von ClassA. Wird Thread 2 warten, bis ClassA vollständig konstruiert ist, bevor er den Konstruktor von ClassB ausführt?
Mit anderen Worten: Verwendet LoadLibrary() eine CriticalSection, um eine thread-sichere Initialisierung der statischen/globalen Werte einer DLL zu gewährleisten? Meine Vermutung ist 'ja', aber ich kann keine Dokumentation finden, die das eine oder das andere sagt.