Что может привести к появлению нескольких экземпляров синглтона в DLL? ⇐ C++
Что может привести к появлению нескольких экземпляров синглтона в DLL?
Я знаю, что этот вопрос задавался и отвечал на него в разных формах на протяжении многих лет, но я считаю, что предыдущие вопросы и ответы по этому поводу слишком привязаны к конкретным примерам и не дают мне полного понимания того, почему и в каких сценариях dll могут создавать несколько экземпляров одного и того же синглтона. Я сам изо всех сил пытаюсь придумать минимальный воспроизводимый пример.
Для примера синглтона в грубой форме:
класс Синглтон { частный: статический синглтон* синглтон; публика: Сингелтон(); // ~Синглтон(); // Не показано для краткости. статический Сингелтон* getSingleton(); }; Синглтон* Синглтон::getSingleton() { если (!синглтон) { синглтон = новый синглтон; } вернуть синглтон; } Это скомпилировано в dll (я назову это SingletonAndOtherStuff.dll), которая предназначена для загрузки через LoadLibrary другими приложениями.
И вот тут я начинаю запутываться.
В отдельном основном приложении (я назову его app.exe) SingletonAndOtherStuff.dll загружается через LoadLibrary в двух местах. . В каких ситуациях может появиться несколько копий статической переменной m_instance?
[*]В случае с ромбовидным узором, приведет ли это к появлению двух синглтонов?:
app.exe / \ статическая/shared_lib статическая/shared_lib \ / SingletonAndOtherStuff.dll [*]Если бы у меня было несколько копий одной и той же библиотеки DLL на диске, привело бы это к появлению нескольких копий синглтона? app.exe / \ / \ статическая/shared_lib статическая/shared_lib | | SingletonAndOtherStuff.dll SingletonAndOtherStuff.dll [*]Если бы существовали другие комбинации или более длинные цепочки библиотек STATIC и SHARED между app.exe и SingletonAndOtherStuff.dll, может ли это привести к появлению нескольких экземпляров синглтона? Я просто ищу объяснение тому, что может привести к сбою этого шаблона в ситуации, когда dll загружается дважды.
Я знаю, что этот вопрос задавался и отвечал на него в разных формах на протяжении многих лет, но я считаю, что предыдущие вопросы и ответы по этому поводу слишком привязаны к конкретным примерам и не дают мне полного понимания того, почему и в каких сценариях dll могут создавать несколько экземпляров одного и того же синглтона. Я сам изо всех сил пытаюсь придумать минимальный воспроизводимый пример.
Для примера синглтона в грубой форме:
класс Синглтон { частный: статический синглтон* синглтон; публика: Сингелтон(); // ~Синглтон(); // Не показано для краткости. статический Сингелтон* getSingleton(); }; Синглтон* Синглтон::getSingleton() { если (!синглтон) { синглтон = новый синглтон; } вернуть синглтон; } Это скомпилировано в dll (я назову это SingletonAndOtherStuff.dll), которая предназначена для загрузки через LoadLibrary другими приложениями.
И вот тут я начинаю запутываться.
В отдельном основном приложении (я назову его app.exe) SingletonAndOtherStuff.dll загружается через LoadLibrary в двух местах. . В каких ситуациях может появиться несколько копий статической переменной m_instance?
[*]В случае с ромбовидным узором, приведет ли это к появлению двух синглтонов?:
app.exe / \ статическая/shared_lib статическая/shared_lib \ / SingletonAndOtherStuff.dll [*]Если бы у меня было несколько копий одной и той же библиотеки DLL на диске, привело бы это к появлению нескольких копий синглтона? app.exe / \ / \ статическая/shared_lib статическая/shared_lib | | SingletonAndOtherStuff.dll SingletonAndOtherStuff.dll [*]Если бы существовали другие комбинации или более длинные цепочки библиотек STATIC и SHARED между app.exe и SingletonAndOtherStuff.dll, может ли это привести к появлению нескольких экземпляров синглтона? Я просто ищу объяснение тому, что может привести к сбою этого шаблона в ситуации, когда dll загружается дважды.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
GCP управлял масштабированием групп экземпляров при сохранении определенных экземпляров
Anonymous » » в форуме Python - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-