Как загрузить общий объект несколько раз независимо

0

Мне поручено разработать небольшой демон (на Debian Linux), который будет использовать blackbox libfoo.so для связи с внешним терминалом EFT. Существует несколько идентичных терминалов EFT (около 100), а один экземпляр libfoo.so может связываться только с одним терминалом. Существует вызов init, который по существу связывает экземпляр с терминалом.

В основном мы используем Java в нашей компании, но это, вероятно, требует реализации C++. Язык программирования еще не определен.

Поскольку нам нужно будет обрабатывать параллельную связь с несколькими терминалами (около, возможно, 10 параллельных потоков), нам нужно будет загрузить несколько экземпляров libfoo.so. Я ищу принципы проектирования, как решить такое требование (dlopen будет загружать SO только один раз, то же самое для JNI). Нужно ли мне создавать дочерние процессы? Скопируйте/вставьте SO и назовите его libfoo_1.so, libfoo_2.so и т.д. (Aargh!) Существуют ли другие решения?

благодаря

Саймон

  • 0
    Когда вы говорите «черный ящик», вы имеете в виду, что у общего объекта нет API вообще?
  • 0
    Извините за неточность при использовании «черного ящика». У SO есть API, однако у нас нет исходного кода, и мы не можем влиять на API.
Теги:
shared-libraries

1 ответ

0
Лучший ответ

Если в библиотеке нет API, то есть он запускает свой код с использованием механизма.init, тогда у вас нет лучшего выбора, чем разветвление родительского процесса и dlopen библиотеки в дочерних процессах.

Это довольно просто на самом деле, если вы не забыли дождаться завершения ваших дочерних процессов, когда это необходимо.

Если вам нужно обработать связь между вашими родительским и дочерними процессами, есть несколько межпроцессных взаимодействие доступных методов, такие как трубы.

  • 0
    Спасибо за подтверждение, что дочерние процессы - это путь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню