Возможно ли использование нескольких экземпляров в общей DLL? - PullRequest
0 голосов
/ 13 апреля 2010

Я собираюсь разработать DLL для приложения MFC и предположить, что у меня есть одноэлементный класс в этой DLL с некоторым механизмом синхронизации. И эта DLL используется другими процессами, а именно EXE. Вопрос заключается в следующем: этот синглтон создается только один раз для всех процессов совместного использования, или у каждого процесса есть свой собственный синглтон?

И как я могу решить эту проблему с несколькими синглетонами?

Ответы [ 3 ]

2 голосов
/ 13 апреля 2010

Полагаю, вы говорите о Windows. В этом случае каждый процесс имеет свой собственный синглтон. Вы можете поместить его в общую память и использовать именованные примитивы синхронизации для совместного использования синглтона между процессами.

0 голосов
/ 13 апреля 2010

Это зависит. По умолчанию все данные в DLL не являются общими и весь код является общим. Но с помощью #pragma section ("SharedSingleton", read, write, shared) вы создаете раздел данных с именем «SharedSingleton», который используется всеми пользователями библиотеки DLL.

Обратите внимание, что создает угрозы безопасности! Еще одна неприятная проблема, с которой вы можете столкнуться - это инициализация синглтона; C ++ не совсем понимает концепцию общих разделов.

0 голосов
/ 13 апреля 2010

Если основано на одноэлементном паттерне, это будет в итоге один синглтон на процесс. Обратите внимание, что если вы запустите несколько потоков в этом процессе, все равно будет только один синглтон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...