Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, Сергей Мухин, Вы писали:
СМ>>либа (как Вы это называете) лежит в памяти и принадлежит процессу, а не потоку. Поэтому, если нигде в ее описании не объявлено, что она thread-safe, то использовать ее в разных thread нельзя.
PD>Интересно, а если так ?
PD>Делаем свою static library, экспонирующую те же функции, что и исходная, только с неким префиксом в имени. Функции просто вызывают соответствующие функции исходной library
PD>Например, в исходной library
PD>PD>int sum(int x, int y)
PD>
PD>А мы делаем
PD>PD>int my1sum(int z, int y)
PD>{
PD> return sum(x,y);
PD>}
PD>
PD>Делаем еще одну свою static library, экспонирующую те же функции, что и исходная, только с неким другим префиксом в имени. (в ней будет my2sum)
PD>Итого имеем две статические library, а к ним статически прилинкованы 2 копии исходной library.
PD>Теперь делаем EXE, к нему линкуем наши обе библиотеки. В своей программе вызываем в одном потоке my1sum, а в другом my2sum.
PD>По идее вызов mysum1 пойдет в первую копию, а mysum2 — во вторую. А мешать они друг другу не должны, так как можно считать, что это две разные библиотеки. И thread-safe не должно быть существенным, так как это разные библиотеки.
PD>Я нигде не ошибся ?
Если в будет вызываться старая либа внутри, то от проблемы не ушли. Если будет полная копия библиотеки, то у нас только два thread! и как вызывать? Все время проверять н омер thread?