Запускать несколько «экземпляров» не поточно-безопасного Dll? - PullRequest
3 голосов
/ 19 марта 2012

У меня есть DLL с исходным кодом, который еще не является потокобезопасным. DLL довольно сложна, и потребуется много времени, чтобы сделать ее поточно-ориентированной. Поэтому мне пришла в голову идея просто запустить несколько «копий» Dll независимо друг от друга. Возможно, проще всего было бы создать N переименованных копий Dll и загрузить по одной отдельной Dll на поток.

Это возможное решение? Есть ли лучший подобный способ? Возможно, существует какой-нибудь код-обертка?

Я знаю, что это совсем не хорошее инженерное решение. Пожалуйста, не вините меня. Но это может решить ряд проблем.

РЕДАКТИРОВАТЬ 2017

Я сделал это, и это работает без проблем. Большой! Пожалуйста, обратите внимание на следующее:

http://msdn.microsoft.com/en-us/library/2s9wt68x%28v=vs.80%29.aspx

Если DLL объявляет какие-либо нелокальные данные или объект как __declspec (поток), это может вызвать сбой защиты при динамической загрузке.

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Это решение вполне возможно и, на мой взгляд, является единственным жизнеспособным способом работы с DLL, имеющей глобальное состояние, которое не является поточно-ориентированным.Это не красиво, но работает.

1 голос
/ 19 марта 2012

Мы делаем это в некоторых наших проектах, которые используют библиотеку Intel JPG для сжатия / распаковки JPG, которая представляет собой однопоточную DLL.Этот метод работает нормально, хотя, как вы говорите, это не идеальное решение, поскольку вы потенциально увеличиваете общее использование памяти вашим приложением, если рассматриваемая DLL выделяет много памяти или использует много ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...