Синхронная динамическая загрузка .DLL в нескольких потоках, возможно ли?

Рейтинг: 2Ответов: 1Опубликовано: 22.04.2015

Есть библиотека на .NET

При синхронном вызове функций библиотеки из нескольких потоков моего приложения она работает некорректно (думаю из-за ее внутренних методов синхронизации). Т.е. есть некий метод Connect() в .dll, при вызове из разных потоков он срабатывает не синхронно, а последовательно.

Возможно ли сделать синхронную динамическую загрузку этой .dll, находящейся по одному и тому же пути, из разных потоков? Может быть есть друге решение?

Ответы

▲ 1Принят

Чтобы библиотеку можно было вызывать из разных потоков, она явно должна это поддерживать.

Путей параллельно использовать однопоточную библиотеку у вас несколько:

  • Грузить библиотеку в разных процессах. Вам придётся создать столько дочерних процессов, сколько операций должно выполняться параллельно. Пуленепробиваемый способ, но тормозной.

  • Грузить библиотеку в разных доменах приложения (app domains). Работает с управляемыми библиотеками.

  • Скопировать библиотеку под другим именем. Взаимодействие с подобной библиотекой заметно усложнится: для нативной библиотеки придётся писать отдельные обёртки под каждый файл (или маршалить вручную), для управляемой библиотеки — разруливать конфликты с помощью алиасов.