Мы используем устаревшую библиотеку на нашем рабочем месте. Он содержит некоторую бизнес-логику, и его код был утерян до смены тысячелетий. Код содержит несколько жестких финансовых алгоритмов, он активно использует глобальные переменные.
Мы планируем провести некоторые вычисления параллельно, запуская новые потоки. Каждый поток будет независим от другого, просто черный ящик, возвращающий некоторое число.
Основная проблема в том, что библиотека не является поточно-ориентированной. Мы бы хотели, чтобы каждый поток имел свою собственную копию глобальных переменных, кода и т. Д. Из общей библиотеки.
Возможно ли это? В настоящее время мы просто исправляем имена символов и делаем копии с префиксами.
library-thread1.so
, library-thread2.so
и т. Д.
Символы загружаются с использованием RTLD_DEEPBIND
под linux.
РЕДАКТИРОВАТЬ: Замена потоков процессами является наиболее прямым способом решения этой проблемы, но это вызывает обеспокоенность по поводу производительности. И, кажется, много работы, чем просто грязный хак.