Обращения к одноэлементной библиотеке

У меня есть одноэлементный класс, и я скомпилирую его как статическую (lib) или динамическую (dll) библиотеку.

Гарантируется ли, что вызовы одного и того же файла на машине всегда относятся к одному и тому же уникальному экземпляру в обоих случаях?

Изменить: что, если процесс загружает две разные библиотеки, и разные функции из этих библиотек хотят использовать экземпляр класса singleton. Теперь они обращаются к одному и тому же экземпляру, я прав?

Спасибо,


person metdos    schedule 28.04.2010    source источник
comment
это зависит от того, как вы реализуете свой синглтон, если вы хотите, чтобы системный синглтон существовал за пределами границ процесса, вам нужно заблокировать что-то на уровне ОС, например. (windows), используя именованный мьютекс в пространстве имен объектов ядра.   -  person AndersK    schedule 28.04.2010
comment
Отредактировал мой ответ в ответ на ваше редактирование.   -  person Stephen    schedule 29.04.2010


Ответы (2)


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

Вам нужно будет использовать какую-то общую память или межпроцессное взаимодействие для обмена данными между процессами.

Если один процесс загружает библиотеки A и B, и обе эти библиотеки используют синглтон из библиотеки C, то они будут использовать один и тот же экземпляр.

person Stephen    schedule 28.04.2010

Вы не вызываете файлы. Вы загружаете код в свой процесс из файла, код содержит инструкции по инициализации, которые создают ваш синглтон. Таким образом, синглтон уникален внутри вашего процесса, независимо от того, какой другой код внутри процесса его использует. Синглтон не уникален для разных процессов, даже если они используют одну и ту же общую библиотеку.

person Marcelo Cantos    schedule 28.04.2010