我有一个dll,其源代码还不是线程安全的。这个DLL非常复杂,它需要相当长的时间才能使它保持线程安全。所以我想出了独立运行Dll的几个“副本”的想法。最简单的方法可能是创建N重命名的Dll副本并为每个线程加载一个单独的Dll。
这是一个可能的解决方案吗? 有更好的相似方式吗? 是否可能存在一些包装代码?
我知道这根本不是一个好的工程解决方案。请不要怪我。但它可能会解决许多问题。
2017年编辑
我已经做到了这一点并且没有问题。大! 请注意以下内容:
http://msdn.microsoft.com/en-us/library/2s9wt68x%28v=vs.80%29.aspx
如果DLL将任何非本地数据或对象声明为__declspec(线程),则在动态加载时会导致保护错误。
答案 0 :(得分:2)
这个解决方案是完全可能的,在我看来,这是处理具有非线程安全的全局状态的DLL的唯一可行方法。它不漂亮,但确实有效。
答案 1 :(得分:1)
我们在一些项目中这样做,它们使用英特尔JPG库进行JPG压缩/解压缩,这是一个单线程DLL。该方法工作正常,但正如您所说的那样,如果您有可能增加应用程序的整体内存使用量,如果所讨论的DLL分配大量内存或使用大量资源,则该方法不是理想的解决方案。