У меня возник вопрос о том, как работает одиночный элемент в статической библиотеке (.a/.lib).Как реализовать одноэлемент в статической библиотеке
class MySingleton {
public:
static
MySingleton&
GetInstance() {
static MySingleton singleton;
return singleton;
}
private:
explicit
MySingleton() {}
virtual
~MySingleton() {}
};
Как вы можете убедиться, что на уровне ОС есть ТОЛЬКО ОДИН МЫГЛЛЛОН, если вы используете статическую библиотеку?
Как вы знаете, статическая библиотека имеет несколько копий в памяти. Эти копии мешают друг другу или совершенно не имеют отношения к делу? Смысл, если у вас есть app1 и app2, есть ли в app1 один MySingleton, а app2 также имеет один MySingleton?
Как вы можете удовлетворить требование, что если приложение 1 запускает и потребляет MySingleton, у приложения 2 нет возможности создать другой MySingleton, даже если он содержит другую копию статической библиотеки.
Возможно, вы сможете использовать именованный семафор (http://linux.die.net/man/3/sem_open) для достижения такого поведения. Однако я не знаю достаточно о семафорах под Linux, чтобы помочь вам в дальнейшем. –
Это звучит неплохо. Почему вы хотите? –
Позвольте мне попытаться рассказать о моем комментарии: если вам удастся маршалировать состояние вашего экземпляра singleton для некоторого IPC, а затем использовать (именованный) семафор, чтобы другие процессы знали о существующих экземплярах, вы могли бы имитировать то, что у вас есть описанных без фактической необходимости обмена памятью. Достаточно ли делить государство? –