运行非线程安全Dll的多个“实例”?

时间:2012-03-19 11:52:03

标签: windows multithreading visual-c++ dll

我有一个dll,其源代码还不是线程安全的。这个DLL非常复杂,它需要相当长的时间才能使它保持线程安全。所以我想出了独立运行Dll的几个“副本”的想法。最简单的方法可能是创建N重命名的Dll副本并为每个线程加载一个单独的Dll。

这是一个可能的解决方案吗? 有更好的相似方式吗? 是否可能存在一些包装代码?

我知道这根本不是一个好的工程解决方案。请不要怪我。但它可能会解决许多问题。

2017年编辑

我已经做到了这一点并且没有问题。大! 请注意以下内容:

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

如果DLL将任何非本地数据或对象声明为__declspec(线程),则在动态加载时会导致保护错误。

2 个答案:

答案 0 :(得分:2)

这个解决方案是完全可能的,在我看来,这是处理具有非线程安全的全局状态的DLL的唯一可行方法。它不漂亮,但确实有效。

答案 1 :(得分:1)

我们在一些项目中这样做,它们使用英特尔JPG库进行JPG压缩/解压缩,这是一个单线程DLL。该方法工作正常,但正如您所说的那样,如果您有可能增加应用程序的整体内存使用量,如果所讨论的DLL分配大量内存或使用大量资源,则该方法不是理想的解决方案。