내가 가지고있는 DLL을 말해봐 다음 글로벌/정적 :를 ClassA의 구현과 함께을 LoadLibrary 정적/전역 및 스레드
ClassA Object;
, 그것은 또한 제대로 작동하지 않습니다 '일반'ClassB가를 포함 ClassA가 아직 구축되지 않았다면 (ClassA가 정적/전역으로 된 이유입니다).
Windows에서는 DLL 로더가 ClassB의 생성자에 대한 호출에서이 DLL을로드한다고 생각합니까? 이 시점에서 ClassA가 생성되고 ClassB의 생성이 수행됩니다. 두 번째 스레드가 ClassB를 구성하고 생성하면 ClassA는 이미 구성되어 있으므로 생성되지 않습니다.
이제 제 질문은 - ClassB가 두 개의 스레드에 의해 동시에 구성되는 경우 어떻게할까요? 그래서 Thread 1은 ClassA를 구성하기 시작할 것입니다. 스레드 2는 ClassA의 생성자를 실행하기 전에 ClassA가 완전히 구성 될 때까지 기다릴 것입니까?
즉, LoadLibrary()는 CriticalSection을 사용하여 DLL의 정적/전역 변수에 대한 스레드 안전 초기화를 보장합니까? 내 직감은 '예'이지만 어떤 방법 으로든 다른 문서를 찾지 못하는 것 같습니다.
감사합니다. 이것은 DllMain 문서를 암시하는 것으로 동의하지만, 다른 사람이 제 해석에 동의하게되어 안심입니다. –